У меня есть элемент std :: vector, и я хотел бы переместить элемент в указанную позицию. У меня уже есть решение, но я смел, если есть лучший способ сделать это.
Давайте предположим, что я хотел бы переместить последний элемент в индекс pos;
Я мог бы сделать
auto posToInsert = vecElements.begin();
std::advance(posToInsert, pos);
vecElements.insert(posToInsert, *m_vecRows.rbegin());
vecElements.erase(m_vecRows.rbegin());
, но это перераспределит память.
К сожалению,
std::move(vecElements.rbegin(), vecElements.rbegin(), posToInsert);
не сработает.
Мое текущее решение делает некоторые перестановки, но без выделения новой памяти
auto newElement = vecElements.rbegin();
for (auto currentPos = vecElements.size()-1; currentPos != pos; --currentPos)
newElement->swap(*(newElement + 1)); // reverseIterator +1 = element before
Чтобы прояснить это, потому что @NathanOliver спросил ... оставшееся упорядочение вектора должно быть сохранено.
Is Есть ли лучший способ сделать это?