我是编写代码的新手,我需要一些帮助。我需要在std::vector
的开头插入值,我需要将此向量中的其他值推送到更多位置,例如:某事添加到矢量的开头,值从位置1移动到2,从2移到3等等。我该怎么做?
答案 0 :(得分:14)
使用std::vector::insert函数接受iterator to the first element作为目标位置(插入元素之前的迭代器):
#include <vector>
int main() {
std::vector<int> v{ 1, 2, 3, 4, 5 };
v.insert(v.begin(), 6);
}
修改:正如评论中所指出的那样,您还可以append元素并执行右侧的rotation:
#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());
}
答案 1 :(得分:3)
您应该考虑使用std::deque
。它的工作方式很像std::vector
,但您可以在前端和末尾添加和删除项目。
它通过将内部存储器分成更小的块来实现。您仍然可以使用具有良好查找速度的随机访问迭代器。
如果您的容器很小,则可以使用std::vector
方法,但如果您要存储大量数据,则std::deque
在前面插入/删除的性能会更好。
答案 2 :(得分:0)
您可以从后面向tar -czf - big-dir | ssh user@host 'cat > /path/to/big-dir.tar.gz'
插入值,然后使用std::reverse
:
示例:
std::vector
输出(1):
#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;
}
输出(2):
5 4 3 2 1
答案 3 :(得分:0)
您可以尝试
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}
插入后每个元素都向右移动