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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.96
Sade
2 / 2 / 1
Регистрация: 20.03.2012
Сообщений: 42
#1

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

19.04.2012, 16:42. Просмотров 12946. Ответов 9
Метки нет (Все метки)

vector<int> k;
надо удалить k[i] элемент.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 16:42     Удалить элемент из std::vector
Посмотрите здесь:

Удалить первый совпадающий по значению элемент из std::vector - C++
Пояснение: дано допустим так: int i = 5; Нужно удалить из вектора vector&lt;int&gt; первый попавшийся элемент со значением 5. Сам уж себя в...

Можно ли удалить объект std::vector, а данные оставить? - C++
void fun(double *p) { std::vector&lt;double&gt; myvector (5); p=myvector.data(); return; } После выполнения p указывает...

Как удалить первые три элемента в std::vector? - C++
Добрый вечер! у меня есть вектор vector&lt;MyClass&gt; v; где MyClass - какой-либо мой класс, допустим вектор заполнен на 6 ячеек. Как...

Std::vector добавить новый элемент собственного класса без использования конструктора копирования - C++
Всем привет! Есть один класс, который я хочу хранить в std::vector. Создать массив, с типом своего класса, грубо говоря. Естественно,...

Теряю ссылку на элемент в std::vector после того, как делаю push_back следующего элемента - C++
Добрый день! Подскажите пожалуйста в чем причина моей ошибки. Сам работал на чистом C++, то есть использовал все по минимуму из C++. В...

Как удалить последний элемент контейнера vector - C++
Доброго вечера всем!!!Подскажите пожалуйста как удалить последний элемент контейнера vector,уменьшив его длину тем самым на 1...

Как удалить первый элемент из std::list? - C++
Скажите как удалить первый элемент из лист ругается вот как 181 C:\Documents and Settings\Loner\Рабочий стол\5.37\Bin.cpp 'class...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
19.04.2012, 16:43     Удалить элемент из std::vector #2
зачем тогда было использовать вектор? Есть же списки!
Конечно, vector::erase тебе в помощь,
Но по мне это как раз тот момент в Си++, когда шаблоны лишают программиста мыслительной функции.
Если бы ты самостоятельно в своё время создавал классы vector, list, queue,
тебе бы была ясна цена, которую ты платишь за удаление элемента из этих структур данных.
Поэтому я продолжаю настаивать, что шаблоны - зло.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
19.04.2012, 16:47     Удалить элемент из std::vector #3
C++
1
k.erase(k.begin() + i);
PointsEqual
ниначмуроФ
834 / 518 / 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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
1928 / 1194 / 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
20.04.2012, 15:41     Удалить элемент из std::vector #8
Цитата Сообщение от diagon Посмотреть сообщение
Не все хотят писать одно и то же по 300 раз, и 300 же раз это отлаживать.
Если уже знаком со списками, очередями, векторами,
то конечно, смело шаблонь,
именно поэтому, я считаю, что STL- это тема не для новичков, и в курсе изучения Си++ должна стоять на последнем месте
после всех структур, классов, ООП, после того как выполнены задания "создать класс вектор", "создать класс список, стек, очередь, дерево, множество и.т.д."
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
Еще ссылки по теме:

Std::vector - C++
Здравствуйте, помогите, пожалуйста, с более теоретическим вопросом. Когда мы не прописываем using namespace std; мы пишем перед...

std::vector - C++
Здравствуйте! Подскажите пожалуйста разумно-ли использовать std::vector если у меня в векторе может храниться довольно большое кол-во...

Собеседование std::vector - C++
1) Вечереет. Вы крутой старший разработчик, сидите и делаете вид, что кодите мегапроект. У вас через полчаса собеседование. Вы...

Указатель на std::vector - C++
Добрый вечер, всегда боялся передавать доступ к std::vector'y класса через: 1) указатель на контейнер 2) ссылка на контейнер 3)...

Контейнер std::vector - C++
Помогите определить почему не работает задача. Оибку выбивает на строку k.push_back(0); #include &lt;iostream&gt; #include &lt;math.h&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru