Переместить часть вектора

Я хотел бы взять диапазон из 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,

2

Решение

Ты хочешь 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);
9

Другие решения

Ты можешь использовать 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);
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector