c++ - 在 C++ 中移动 vector 的值

标签 c++ stdvector

假设有以下基本 vector :

 std::vector<int> numbers;
 numbers.push_back(0);
 numbers.push_back(1);
 numbers.push_back(2);
 numbers.push_back(3);

在 0 和 1 之间插入 6 个新数字的有效方法是什么?

这是我现在的方法,但我觉得它不是很有效:

 for (int new_number=0;new_number<6;new_number++) {
     numbers.emplace(numbers.begin()+1+new_number,new_number);
 }

我不喜欢这种方法的原因是数字 1-3 必须移动 6 次。有没有办法只移动这些数字一次而不是移动 6 次?然后我可以使用这个循环:

 for (int new_number=0;new_number<6;new_number++) {
     numbers[new_number+1]=new_number;
 }

这是我想要完成的:

移动前的 vector :

0 1 2 3

移位后的 vector :

0 X X X X X X 1 2 3

最佳答案

insert 过载允许您插入 n 个相同项目的函数:

// Add six copies of -1 to the vector starting at position 1
numbers.insert(numbers.begin()+1, 6, -1);

您可以使用另一个带有三个迭代器的重载 - 插入位置的迭代器,以及从中获取数据的开始/结束迭代器对:

// Insert addedNUmbers at position 1
numbers.insert(numbers.begin()+1, addedNUmbers.begin(), addedNUmbers.end());

关于c++ - 在 C++ 中移动 vector 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146582/

相关文章:

c++ - 访问 'padded'字节是不是UB?

c++ - 碱基转换问题

c++ - 如何在文件中节省空间地存储和检索 std::vector<int> 值

c++ - 具体元素数量 - vector

c++ - 为什么 C++ 默认初始化不对非类类型成员进行零初始化

c++ - 定义命名空间作用域函数

c++ - 快速的每列求和。可能的?

c++ - 如何洗牌 std::vector?

c - 如何从 std::vector<std::reference_wrapper> 获取 C 数组

c++ - 使用 move 从 vector 构造对象