我想知道是否有办法扭转一个向量并将其构建到另一个向量中?
#include "std_lib_facilities.h"
int main()
{
vector<int> oldvector;
oldvector[1];
oldvector[3];
oldvector[5];
oldvector[7];
oldvector[9];
}
这是我到目前为止,任何帮助都会很棒。
答案 0 :(得分:3)
如果您想创建一个新的矢量,那么您可以这样做:
std::vector<int> oldvector = {1,2,3,4,5};
std::vector<int> newvector(oldvector.rbegin(), oldvector.rend());
答案 1 :(得分:2)
要反转矢量,您只需使用
即可std::reverse(a.begin(), a.end());
然后将其用作新的载体。
答案 2 :(得分:2)
您可能希望使用 std::reverse()
来反转到位,或者反转 std::vector::rbegin()
/ {{返回的迭代器1}} 构建原始向量的反向副本。
考虑以下可编译的示例代码(live here on Ideone.com):
rend()
输出:
#include <algorithm> // For std::reverse #include <iostream> // For console output #include <vector> // For std::vector using namespace std; // Used to print elements of a sequence (like vector). template <typename Sequence> void print(const Sequence& s) { cout << "[ "; for (const auto& x : s) { cout << x << ' '; } cout << "]" << endl; } int main() { cout << "Original vector:\n"; vector<int> v{10, 20, 30, 40, 50}; print(v); vector<int> v2(v.rbegin(), v.rend()); cout << "\nReversed copy using reverse iterators:\n"; print(v2); reverse(v.begin(), v.end()); cout << "\nReversed in-place using std::reverse():\n"; print(v); }
答案 3 :(得分:2)
有几种方法可以完成这项任务。最简单的方法是使用带有参数的构造函数或成员函数assign
作为迭代器
例如
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v1 = { 1, 3, 5, 7, 9 };
std::vector<int> v2( v1.rbegin(), v1.rend() );
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
}
或
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v1 = { 1, 3, 5, 7, 9 };
std::vector<int> v2;
v2.assign( v1.rbegin(), v1.rend() );
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
}
另一种方法是使用标准算法std::reverse_copy
。例如
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1 = { 1, 3, 5, 7, 9 };
std::vector<int> v2;
v2.reserve( v1.size() );
std::reverse_copy( v1.begin(), v1.end(), std::back_inserter( v2 ) );
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
}
或者您可以使用普通循环编写相同的内容
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v1 = { 1, 3, 5, 7, 9 };
std::vector<int> v2;
v2.reserve( v1.size() );
for ( std::vector<int>::size_type i = v1.size(); i != 0; )
{
--i;
v2.push_back( v1[i] );
}
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
}
甚至你可以使用堆栈作为中间容器!:)
#include <iostream>
#include <vector>
#include <stack>
int main()
{
std::vector<int> v1 = { 1, 3, 5, 7, 9 };
std::stack<int> s;
for ( int x : v1 ) s.push( x );
std::vector<int> v2;
v2.reserve( v1.size() );
while ( !s.empty() )
{
v2.push_back( s.top() );
s.pop();
}
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
那么递归函数呢?好吧,它可以看作例如
#include <iostream>
#include <vector>
std::vector<int>::iterator reverse( std::vector<int>::const_iterator first,
std::vector<int>::const_iterator last,
std::vector<int>::iterator out )
{
if ( first != last )
{
int x = *first++;
out = ::reverse( first, last, out );
*out++ = x;
}
return out;
}
int main()
{
std::vector<int> v1 = { 1, 3, 5, 7, 9 };
std::vector<int> v2( v1.size() );
::reverse( v1.cbegin(), v1.cend(), v2.begin() );
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
对不起!我忘了提到标准算法std::copy_backward
。它也可以应用
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v1 = { 1, 3, 5, 7, 9 };
std::vector<int> v2( v1.size() );
std::copy_backward( v1.begin(), v1.end(), v2.rend() );
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}