如何将元素插入矢量的开头

How can I insert element into beginning of vector?

本文关键字:开头 插入 元素      更新时间:2023-10-16

>我需要将值插入std::vector并且我需要将此向量中的其他值推送到更远的位置,例如:向量开头添加的内容以及值从位置 1 移动到 2,从 2 移动到 3 等。

我该怎么做?

使用 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的性能将要优越得多。

这个呢?

#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是否为空等。

你可以

试试这个

    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}

插入后,每个元素都向右移动

您可以从后面插入值到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