重新定位矢量的一部分

时间:2012-11-22 21:50:10

标签: c++ vector std

我想从vector取出一个范围(删除项目),然后在同一个向量中以相同的顺序插入它们,但是在另一个位置。

示例:

                  0 1 2 3 4 5
Original vector:  A B C D E F

取范围1-3并插入({1}}之后。

4


我可以使用 0 1 2 3 4 5 Resulting vector: A E B C D F 循环或使用remove_copyinsert执行此操作。有更好/更快的方式吗?我对for不喜欢的是,我必须指定才能删除的remove_copy。我想移动所有这些内容,但我不确定是否可以指定value中永远不会出现的value

2 个答案:

答案 0 :(得分:9)

您想要std::rotate

#include <vector>
#include <algorithm>

//                           |<---------->|<->|          <-- rotate this range
std::vector<char> v = { 'A', 'B', 'C', 'D', 'E', 'F' };

std::rotate(v.begin() + 1, v.begin() + 4, v.begin() + 5);

答案 1 :(得分:1)

您可以使用std::copy_backward复制对象(复制,不移动),然后使用std::vector::erase删除原始对象。

对于你的例子:

std::copy_backward(v.begin()+1, v.begin()+3, v.begin()+4);
v.erase(v.begin()+1, v.begin()+3);