如何反转C ++向量?

在C ++中是否有一个内置的vector函数来反转一个vector?

或者你只需​​要手动?

algorithm头中有一个函数std::reverse用于此目的。

 #include <vector> #include <algorithm> int main() { std::vector<int> a; std::reverse(a.begin(), a.end()); return 0; } 

所有容器都使用rbegin()rend()提供其内容的反转视图 。 这两个函数返回所谓的反向迭代器 ,可以像普通的那样使用,但是看起来像容器实际上是颠倒过来的。

 #include <vector> #include <iostream> template<class InIt> void print_range(InIt first, InIt last, char const* delim = "\n"){ --last; for(; first != last; ++first){ std::cout << *first << delim; } std::cout << *first; } int main(){ int a[] = { 1, 2, 3, 4, 5 }; std::vector<int> v(a, a+5); print_range(v.begin(), v.end(), "->"); std::cout << "\n=============\n"; print_range(v.rbegin(), v.rend(), "<-"); } 

在Ideone上的生动的例子 。 输出:

 1->2->3->4->5 ============= 5<-4<-3<-2<-1 

你可以像这样使用std::reverse

 std::reverse(str.begin(), str.end()); 

你也可以使用std::list来代替std::vectorlist有一个内置的函数list :: reverse来反转元素。

如果您不想使用内置的reverse()方法,则可以使用此逻辑:

 vector<string>::iterator itr; vector<string>::iterator it; for (itr = v.begin(), it = v.end()-1; itr!=v.end(), \ it!=(v.begin()+(v.size()-1)/2); \ ++itr, --it) { string temp; temp = *itr; *itr = *it; *it = temp; }