How do I reverse a C++ vector?
C ++中是否有内置矢量功能可以将矢量反向转换到位?
还是只需要手动进行?
为此,在
1 2 3 4 5 6 7 8 | #include <vector> #include int main() { std::vector<int> a; std::reverse(a.begin(), a.end()); return 0; } |
所有容器都使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <vector> #include <iostream> template<class InIt> void print_range(InIt first, InIt last, char const* delim ="\ "){ --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 <<"\ =============\ "; print_range(v.rbegin(), v.rend(),"<-"); } |
有关Ideone的实时示例。输出:
1 2 3 | 1->2->3->4->5 ============= 5<-4<-3<-2<-1 |
您可以像这样使用
1 | std::reverse(str.begin(), str.end()); |
您也可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include #include<vector> #include<iostream> using namespace std; int main() { vector<int>v1; for(int i=0; i<5; i++) v1.push_back(i*2); for(int i=0; i<v1.size(); i++) cout<<v1[i]; //02468 reverse(v1.begin(),v1.end()); for(int i=0; i<v1.size(); i++) cout<<v1[i]; //86420 } |
通常,您想反转向量的原因是因为您通过将所有项目推到最后来填充它,但实际上却以相反的顺序接收它们。在这种情况下,您可以通过使用
1 2 3 4 5 6 | std::vector<int> foo; int nextItem; while (getNext(nextItem)) { foo.push_back(nextItem); } std::reverse(foo.begin(), foo.end()); |
您可以改为:
1 2 3 4 5 6 | std::deque<int> foo; int nextItem; while (getNext(nextItem)) { foo.push_front(nextItem); } // No reverse needed - already in correct order |