如何在矢量的开头插入元素?

我需要在 std::vector的开头插入一些值,我需要把这个向量中的其他值推到更远的位置,例如: 在向量的开头添加一些东西,然后把值从位置1移动到位置2,从位置2移动到位置3,等等。

我该怎么做?

166171 次浏览

使用接受 第一个元素的迭代器作为目标位置的 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::vector方法应该没有问题,但是如果存储大量数据,那么在前端插入/删除的 std::deque性能要好得多。

您可以从后面向 std::vector插入值,然后使用 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是否为空等等。