Форум программистов, компьютерный форум CyberForum.ru

Удалить элемент из std::vector - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.96
Sade
2 / 2 / 1
Регистрация: 20.03.2012
Сообщений: 42
19.04.2012, 16:42     Удалить элемент из std::vector #1
vector<int> k;
надо удалить k[i] элемент.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.04.2012, 16:43     Удалить элемент из std::vector #2
зачем тогда было использовать вектор? Есть же списки!
Конечно, vector::erase тебе в помощь,
Но по мне это как раз тот момент в Си++, когда шаблоны лишают программиста мыслительной функции.
Если бы ты самостоятельно в своё время создавал классы vector, list, queue,
тебе бы была ясна цена, которую ты платишь за удаление элемента из этих структур данных.
Поэтому я продолжаю настаивать, что шаблоны - зло.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
19.04.2012, 16:47     Удалить элемент из std::vector #3
C++
1
k.erase(k.begin() + i);
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2012, 17:52     Удалить элемент из std::vector #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
а еще лучше так

C++ (Qt)
1
2
k.erase(k.begin() + i);
vector<int>(k).swap(k);
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.04.2012, 18:12     Удалить элемент из std::vector #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от PointsEqual Посмотреть сообщение
C++
1
vector<int>(k).swap(k);
А вот такие конструкции начинающим обычно неочевидны, так что лучше разъяснять эзотерический смысл. Поскольку после удаления элементов в конце векторе остаётся занята память, которую они занимали, проделывается такой фокус: создаётся временная копия вектора k, в которую копируются все оставшиеся элементы k, причём памяти эта копия отъедает ровно на i элементов, после чего новый кусочек памяти передаётся во владение самому k, а старый кусочек - времянке. Времянка тут же уничтожается, а в векторе k не отъедается неиспользованная память.
Разумеется, это имеет смысл лишь в том случае, если мы не собираемся расширять k в дальнейшем.
Sade
2 / 2 / 1
Регистрация: 20.03.2012
Сообщений: 42
20.04.2012, 14:08  [ТС]     Удалить элемент из std::vector #6
У меня такая задача ,что очень много его надо использовать этот массив , поэтому динамические списки не в тему бы были ,а что функция erase там работает за O(N) это не важно так как я её не много использую.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.04.2012, 15:04     Удалить элемент из std::vector #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но по мне это как раз тот момент в Си++, когда шаблоны лишают программиста мыслительной функции.
1) Любой более менее опытный программист знает асимптотическую сложность алгоритмов STL.
2) Эту сложность можно посмотреть в инэте. Например, тут(внизу есть complexity).
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Поэтому я продолжаю настаивать, что шаблоны - зло.
Не все хотят писать одно и то же по 300 раз, и 300 же раз это отлаживать.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.04.2012, 15:41     Удалить элемент из std::vector #8
Цитата Сообщение от diagon Посмотреть сообщение
Не все хотят писать одно и то же по 300 раз, и 300 же раз это отлаживать.
Если уже знаком со списками, очередями, векторами,
то конечно, смело шаблонь,
именно поэтому, я считаю, что STL- это тема не для новичков, и в курсе изучения Си++ должна стоять на последнем месте
после всех структур, классов, ООП, после того как выполнены задания "создать класс вектор", "создать класс список, стек, очередь, дерево, множество и.т.д."
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
20.04.2012, 16:00     Удалить элемент из std::vector #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Если уже знаком со списками, очередями, векторами,
то конечно, смело шаблонь,
именно поэтому, я считаю, что STL- это тема не для новичков, и в курсе изучения Си++ должна стоять на последнем месте
после всех структур, классов, ООП, после того как выполнены задания "создать класс вектор", "создать класс список, стек, очередь, дерево, множество и.т.д."
Тогда можно сказать, что перед C++ нужно обязательно изучить C.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2012, 16:04     Удалить элемент из std::vector
Еще ссылки по теме:

C++ Std::vector добавить новый элемент собственного класса без использования конструктора копирования
C++ Теряю ссылку на элемент в std::vector после того, как делаю push_back следующего элемента
C++ Как удалить первые три элемента в std::vector?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.04.2012, 16:04     Удалить элемент из std::vector #10
Kuzia domovenok, в нормальных книгах так и есть. У Дейтелов, например, на протяжении всей книги идут задания и примеры реализации функций и классов аналогичных из стандартных библиотек. А сам STL идет в конце книги.
Yandex
Объявления
20.04.2012, 16:04     Удалить элемент из std::vector
Ответ Создать тему
Опции темы

Текущее время: 15:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru