如何将元素插入向量的开头?

时间:2018-01-14 15:42:23

标签: c++ visual-c++ vector std

我是编写代码的新手,我需要一些帮助。我需要在std::vector的开头插入值,我需要将此向量中的其他值推送到更多位置,例如:某事添加到矢量的开头,值从位置1移动到2,从2移到3等等。我该怎么做?

4 个答案:

答案 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}

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