如何反转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::vector
。 list
有一个内置的函数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; }