2

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

例子:

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

取范围1-3并在 (after) 处插入4

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


我可能可以使用for循环或使用remove_copyand来做到这一点insert。有没有更好/更快的方法?我不喜欢的remove_copy是我必须指定一个value应该被删除的。我想移动所有这些,但我不确定我是否可以指定一个永远不会出现在.valuevector

4

2 回答 2

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);
于 2012-11-22T21:56:37.617 回答
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);
于 2012-11-22T22:04:28.383 回答