Я хотел бы взять диапазон из vector
(удалите элементы) и вставьте их в том же порядке в том же векторе, но в другом месте.
Пример:
0 1 2 3 4 5
Original vector: A B C D E F
Взять диапазон 1-3
и вставить в (после) 4
,
0 1 2 3 4 5
Resulting vector: A E B C D F
Я мог бы сделать это с for
петли, или используя remove_copy
а также insert
. Есть ли лучший / более быстрый способ? Что мне не нравится с remove_copy
является то, что я должен указать value
это должно не удалить. Я хочу переместить все из них, и я не уверен, что могу указать value
что никогда не происходит в vector
,
Ты хочешь 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);
Ты можешь использовать 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);