Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

vector<int> k;
надо удалить k[i] элемент.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 16:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить элемент из std::vector (C++):

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

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами - C++
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Передача функции указатель на элемент std::vector<std::string> - C++
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию? - C++
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

Как изменять размер std::vector<std::vector>? - C++
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

Вывести значения std::vector<std::vector<int*> > - C++
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3; std::vector&lt;std::vector&lt;int*&gt; &gt; imatrix; //...

9
Kuzia domovenok
1951 / 1804 / 140
Регистрация: 25.03.2012
Сообщений: 6,247
Записей в блоге: 1
19.04.2012, 16:43 #2
зачем тогда было использовать вектор? Есть же списки!
Конечно, vector::erase тебе в помощь,
Но по мне это как раз тот момент в Си++, когда шаблоны лишают программиста мыслительной функции.
Если бы ты самостоятельно в своё время создавал классы vector, list, queue,
тебе бы была ясна цена, которую ты платишь за удаление элемента из этих структур данных.
Поэтому я продолжаю настаивать, что шаблоны - зло.
1
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
19.04.2012, 16:47 #3
C++
1
k.erase(k.begin() + i);
1
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2012, 17:52 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
а еще лучше так

C++ (Qt)
1
2
k.erase(k.begin() + i);
vector<int>(k).swap(k);
2
Nick Alte
Эксперт С++
1640 / 1012 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
19.04.2012, 18:12 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от PointsEqual Посмотреть сообщение
C++
1
vector<int>(k).swap(k);
А вот такие конструкции начинающим обычно неочевидны, так что лучше разъяснять эзотерический смысл. Поскольку после удаления элементов в конце векторе остаётся занята память, которую они занимали, проделывается такой фокус: создаётся временная копия вектора k, в которую копируются все оставшиеся элементы k, причём памяти эта копия отъедает ровно на i элементов, после чего новый кусочек памяти передаётся во владение самому k, а старый кусочек - времянке. Времянка тут же уничтожается, а в векторе k не отъедается неиспользованная память.
Разумеется, это имеет смысл лишь в том случае, если мы не собираемся расширять k в дальнейшем.
8
Sade
2 / 2 / 1
Регистрация: 20.03.2012
Сообщений: 42
20.04.2012, 14:08  [ТС] #6
У меня такая задача ,что очень много его надо использовать этот массив , поэтому динамические списки не в тему бы были ,а что функция erase там работает за O(N) это не важно так как я её не много использую.
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.04.2012, 15:04 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но по мне это как раз тот момент в Си++, когда шаблоны лишают программиста мыслительной функции.
1) Любой более менее опытный программист знает асимптотическую сложность алгоритмов STL.
2) Эту сложность можно посмотреть в инэте. Например, тут(внизу есть complexity).
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Поэтому я продолжаю настаивать, что шаблоны - зло.
Не все хотят писать одно и то же по 300 раз, и 300 же раз это отлаживать.
0
Kuzia domovenok
1951 / 1804 / 140
Регистрация: 25.03.2012
Сообщений: 6,247
Записей в блоге: 1
20.04.2012, 15:41 #8
Цитата Сообщение от diagon Посмотреть сообщение
Не все хотят писать одно и то же по 300 раз, и 300 же раз это отлаживать.
Если уже знаком со списками, очередями, векторами,
то конечно, смело шаблонь,
именно поэтому, я считаю, что STL- это тема не для новичков, и в курсе изучения Си++ должна стоять на последнем месте
после всех структур, классов, ООП, после того как выполнены задания "создать класс вектор", "создать класс список, стек, очередь, дерево, множество и.т.д."
0
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
20.04.2012, 16:00 #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Если уже знаком со списками, очередями, векторами,
то конечно, смело шаблонь,
именно поэтому, я считаю, что STL- это тема не для новичков, и в курсе изучения Си++ должна стоять на последнем месте
после всех структур, классов, ООП, после того как выполнены задания "создать класс вектор", "создать класс список, стек, очередь, дерево, множество и.т.д."
Тогда можно сказать, что перед C++ нужно обязательно изучить C.
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
20.04.2012, 16:04 #10
Kuzia domovenok, в нормальных книгах так и есть. У Дейтелов, например, на протяжении всей книги идут задания и примеры реализации функций и классов аналогичных из стандартных библиотек. А сам STL идет в конце книги.
0
20.04.2012, 16:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2012, 16:04
Привет! Вот еще темы с ответами:

Можно ли удалить объект 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<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> - C++
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...

Std::vector/QVector в классе или std::vector/QVector классов? - C++
Доброе время суток! Собственно вопрос в самой теме, есть некий класс class WorkJornal { private: string manager; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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