我想从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_copy
和insert
执行此操作。有更好/更快的方式吗?我对for
不喜欢的是,我必须指定不才能删除的remove_copy
。我想移动所有这些内容,但我不确定是否可以指定value
中永远不会出现的value
。
答案 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);