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

Paw*_*icz 9 c++ vector std visual-c++

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

Ron*_*Ron 19

使用std :: vector :: insert函数接受第一个元素的迭代器作为目标位置(插入元素之前的迭代器):

#include <vector>

int main() {
    std::vector<int> v{ 1, 2, 3, 4, 5 };
    v.insert(v.begin(), 6);
}
Run Code Online (Sandbox Code Playgroud)

编辑:正如评论中所指出的,您还可以附加元素并向右执行旋转:

#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());
}
Run Code Online (Sandbox Code Playgroud)

  • 我不会将“insert”的第一个参数称为提示,我会说它更像是目标位置。 (2认同)
  • @PawełSzymkowicz:使用`std :: rotate`将它带到第一个位置.比插入和删除更清洁,更有效. (2认同)
  • @JerryCoffin 为什么 `push_back`&amp;`rotate` 比 `insert` 更快? (2认同)

sup*_*per 16

您应该考虑使用std::deque. 它的工作原理很像 a,std::vector但您可以从前端和后端添加和删除项目。

它通过将内部存储分成更小的块来实现这一点。您仍然拥有具有良好查找速度的随机访问迭代器。

如果您的容器很小,使用这种std::vector方法应该没问题,但是如果您存储大量数据std::deque,则在前面插入/删除的性能会好得多。

  • @AshutoshTiwari 它提供了与接受的答案不同的解决方案。这是对一个问题有多个答案的好处之一。他们相辅相成。 (3认同)