#c #c 11 #std #move
#c #c 11 #ЗППП #переместить
Вопрос:
Я пытаюсь реализовать функцию вставки, используя std::move_backward. Я нашел этот код на cplusplus.com . Я не совсем понимаю, как работает std::move_backward .
#include <algorithm> // std::move_backward
#include <string> // std::string
int main () {
std::string elems[10] = {"air","water","fire","earth"};
// insert new element at the beginning:
std::move_backward (elems,elems 4,elems 5);
elems[0]="ether";
std::cout << "elems contains:";
for (int i=0; i<10; i)
std::cout << " [" << elems[i] << "]";
std::cout << 'n';
return 0;
}
output is "elems contains: [ether] [air] [water] [fire] [earth] [] [] [] [] []"
как бы вы вставили во 2-ю позицию (или любую позицию), используя тот же метод, что и выше, чтобы
результат был
output: elems contains: [air] [ether] [water] [fire] [earth] [] [] [] [] []
Комментарии:
1. Есть ли у вас основания для использования
move_backwards
в частности? Или это только то, что вы пытались решить проблему?2. @cigien это как раз то, с чем я пытался решить проблему. Я также не хочу делать ненужную копию. Если вы знаете какой-то лучший / другой способ решения этой проблемы, пожалуйста, дайте мне знать.
3. Нет, это хороший алгоритм для этого. Мне просто интересно, выбрали ли вы это только потому, что где-то нашли.
Ответ №1:
Если вы хотите вставить ether
во вторую позицию, просто измените диапазон, который вы перемещаете назад, чтобы не включать 0-ю позицию:
std::move_backward(elems 1, elems 4, elems 5);
// ^^ ignore 0th position
elems[1]="ether"; // insert element at at 1st position
Вот демонстрация