Здравствуйте, Аноним, Вы писали:
А>Здравствуйте
А>Подскажите как можно в векторе переместить элемент из середины в начало, так что сохранить последовательность.
int arr[] = {2, 1, 3};
vector<int> v(arr, arr+3);
int index = 1;
v.insert(v.begin(), v[index]);//добавляем копию требуемого элемента в начало
v.erase(v.begin() + index + 1);//удаляем исходный элемент
Сразу хочу сказать, что метод очень неэффективный, т.к. элементы контейнера копируются 2 раза. В некоторых случаях может даже случится реаллокация.
Если операция swap для элементов контейнера дешева, то можно попробовать вот такой вариант:
for(int i = index; i > 0; --i)
swap(v[i-1], v[i]);
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте
А>Подскажите как можно в векторе переместить элемент из середины в начало, так что сохранить последовательность.
1. Запомнить элемент
2. memmove кусок памяти от начала до этого элемента на 4 байта правее
3. a[0] = запомненый элемент.
With best regards
Pavel Dvorkin
Переместить элементы в векторе
От:
Аноним
Дата:
20.11.08 06:37
Оценка:
Здравствуйте
Подскажите как можно в векторе переместить элемент из середины в начало, так что сохранить последовательность.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте
А>Подскажите как можно в векторе переместить элемент из середины в начало, так что сохранить последовательность.
вот как-то так. Вроде структуры нарушить не должно. А вообще для таких вещей всеже по моему мнению праивльнее использовать двусвязные списки. std::list напимер...