我需要在 std::vector的开头插入一些值,我需要把这个向量中的其他值推到更远的位置,例如: 在向量的开头添加一些东西,然后把值从位置1移动到位置2,从位置2移动到位置3,等等。
std::vector
我该怎么做?
使用接受 第一个元素的迭代器作为目标位置的 Std: : vector: : insert函数(迭代器,在迭代器之前插入元素) :
#include <vector> int main() { std::vector<int> v{ 1, 2, 3, 4, 5 }; v.insert(v.begin(), 6); }
或者,附录元素并执行右边的 旋转:
#include <vector> #include <algorithm> int main() { std::vector<int> v{ 1, 2, 3, 4, 5 }; v.push_back(6); std::rotate(v.rbegin(), v.rbegin() + 1, v.rend()); }
您应该考虑使用 std::deque。它的工作原理很像一个 std::vector,但你可以添加和删除项目,从前面和结束。
std::deque
它通过将内部存储划分为更小的块来实现这一点。您仍然可以使用具有良好查找速度的随机访问迭代器。
如果容器很小,那么使用 std::vector方法应该没有问题,但是如果存储大量数据,那么在前端插入/删除的 std::deque性能要好得多。
您可以从后面向 std::vector插入值,然后使用 std::reverse:
std::reverse
例如:
#include <vector> #include <algorhitm> #include <iostream> void printVector( std::vector< int > const & _vector ) { for( auto value : _vector ) { std::cout << value << " "; } std::cout << std::endl; } int main() { std::vector< int > someVec; someVec.push_back( 5 ); someVec.push_back( 4 ); someVec.push_back( 3 ); someVec.push_back( 2 ); someVec.push_back( 1 ); // (1) printVector( someVec ); std::reverse( someVec.begin(), someVec.end() ); // (2) printVector( someVec ); return 0; }
产出(1) :
5 4 3 2 1
产出(2) :
1 2 3 4 5
你可以试试这个
vector<int> v={1,2,3,4,5}; for(int i=0;i<5;i++){ v.insert(v.begin(),i+1); }
输出为 {5,4,3,2,1,1,2,3,4,5}
插入后,每个元素都向右移动
这个怎么样?
#include <vector> #include <algorithm> #include <iterator> int main() { std::vector<int> v1 = { 1, 2, 3 }; std::vector<int> v2 = { 4, 5, 6 }; // merge std::vector<int> dst; std::merge(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(dst)); }
最后 dst 是: {1,2,3,4,5,6}
注意: 这是一个示例,所以您应该检查 v1是否为空等等。