Как удалить элемент из вектора c

Remove an element from a vector by value — C++

Where each element in the list is unique, what’s the easiest way of deleting an element provided that I don’t know if it’s in the list or not? I don’t know the index of the element and I don’t care if it’s not on the list.

4 Answers 4

Or, if you’re sure, that it is unique, just iterate through the vector and erase the found element. Something like:

Based on Kiril’s answer, you can use this function in your code :

And use it like this

56ka's user avatar

If occurrences are unique, then you should be using std::set<T> , not std::vector<T> .

This has the added benefit of an erase member function, which does what you want.

See how using the correct container for the job provides you with more expressive tools?

Удаление элемента из vector

Удаление элемента из vector
Здорова! Пытаюсь удалить элемент из vector&lt;string&gt;, но чото ошибку выдает и я вообще не пойму что.

Удаление элемента из std::vector<>
— Здравствуйте завсегдатаи! Подскажите пожалуйста, можно ли из STL-ского вектора std::vector&lt;int&gt;.

Вставка (с указанием положения) и удаление элемента в vector
Помогите сделать вставку с указанием положения #include &lt;iostream&gt; #include &lt;vector&gt; #include.

Удаление элемента из вектора ( std::vector<Bullet> )
Здравствуйте! У меня возникла проблема во время удаления элементов, значения которых не.

какой нафиг delete[] ? Oo

1rop, Нет удаления по индексу. Есть удаление по итератору.
Вот так можно сэмулировать удаление по индексу.

Сообщение от 1rop
Сообщение от ForEveR
Сообщение от 1rop

Итератор на первый элемент.

Сообщение от 1rop
Сообщение от Jupiter

Сообщение от ForEveR

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
Добавить в класс &quot;Односвязный список&quot; следующие функции: вставка элемента в заданную позицию.

Удаление объекта из <vector>
Подскажите, пожалкуйста Имею следующий код: EditTest() — friend фукнция для другого класса.

Удаление элементов из vector<string>
Здравствуйте.Решаю одну задачу, столкнулся с такой проблемой. Имеется vector&lt;string&gt;, в котором.

Удаление элементов из std::vector
У меня есть класс Zone. Но объявлен как массив vector в другом классе. class World < public.

Вектора в C++ (часть 4)

В вектор можно добавлять элементы с помощью указателей, для этого используется функция vector::data() . Вывод вектора так же можно осуществить при помощи указателя, пример:

First output: 0 1 2 3 4
Second output: 0 1 2 3 4
Third output: 0 1 2 3 4

В 7 строке мы объявили вектор vecInt размером на 5 элементов типа int . В 9 строке создаем указатель pointer , указывающий на нулевой элемент вектора. С 10-13 строки производим заполнение вектора при помощи указателя pointer . Вывод нашего вектора можно выполнить тремя различными способами. В строках с 16-19 выполняется первый вариант вывода. Этот вариант вывода равносилен выводу массива с использованием указателей, так, что нечего необычного и непонятного для Вас быть не должно.

Следующий вариант вывода описан в строках 23-27. Поскольку расположение элементов вектора в памяти производится последовательно один за другим, то в строке 25 указатель указывает на ячейку в памяти, где расположен i -тый элемент вектора (вывод которого мы и осуществляем) . В 26 строке используя постфиксную форму, мы увеличиваем значение указателя на единицу, указатель указывает на следующий элемент вектора. Третий вывод самый обычный, описан с 31-34 строку, с ним тоже вопросов быть не должно.

В вектора можно вставлять элемент, как в начало вектора, так и в конец, при помощи функций vector::emplace() и vector::emplace_back() , рассмотрим пример:

Vector contains: 10 0 10 1 2 3 4 10

Работу программы в строках с 6-12, думаю, описывать не стоит. В 15 строке итератор it указывает на начало нашего вектора, а в 17 строке при помощи функции vector::emplace() и итератора it , мы помещаем число 10 в начало вектора, т. е. vector::emplace() принимает два аргумента, первый, это позиция куда будет помещен элемент (в нашем случае vecInt.begin() или нулевой элемент вектора), второе, сам элемент (в нашем случае число 10).

В 19 строке итератор указывает на второй элемент в векторе vecInt[2] . Назначение строки 21 равносильно строке 17. В 23 строке с помощью функции vector::emplace_back() , мы помещаем число 10 в конец вектора. Эта запись равносильна vecInt.push_back(10). В строках 26-29 производится вывод вектора на экран с помощью итератора it .

Вектора имеют функцию, которая позволяет определить пустой ли вектор, позволяет удалить определенный элемент, получить доступ к нулевому и последнему элементу, пример:

vecIntSecond contains: 0 1 2 3 4 5 6 7 8 9
vecIntFirst is empty
vecIntSecond is not empty
vecIntSecond contains: 0 2 7 8 9
first element in vector: 0
last element in vector: 9
first-last: -9

Думаю до строки 19, объяснять работу программы не стоит. В 19 и 20 строке мы знакомимся с новым оператором vector::empty() который возвращает значение true если пустой вектор и false если полон. В строках 19 и 20 используется тернарный оператор ( ? : ), который равносилен конструкции if() else() . Строку 19 можно прочитать так: если vecIntFirst пуст, то выведи сообщение, что он пуст, иначе выведи сообщение, что он не пуст. 20 строка равносильна 19 строке. В строке 23 с использованием функции vector:erase() , мы стираем первый элемент вектора (не забывайте, что вектора как и массивы нумеруются с нулевого элемента).

Как удалить элемент из вектора c

На этом шаге мы рассмотрим операции вставки и удаления элементов .

В таблице 1 перечислены операции вставки и удаления элементов, поддерживаемые векторами. Как это обычно бывает при использовании STL , правильность аргументов обеспечивается вызывающей стороной. Итераторы должны ссылаться на правильные позиции, конец интервала не должен предшествовать началу, элементы не должны удаляться из пустого контейнера.

Таблица 1. Операции вставки и удаления для векторов
Операция Описание
c.insert(pos,elem) Вставляет в позицию итератора pos копию элемента elem и возвращает позицию нового элемента
c.insert(pos,n,elem) Вставляет в позицию итератора pos n копий элемента elem (и не возвращает значения)
c.insert(pos,beg,end) Вставляет копию всех элементов интервала [beg,end) в позицию итератора pos (и не возвращает значения)
c.push_back(elem) Присоединяет копию elem в конец вектора
c.pop_back() Удаляет последний элемент (не возвращая его)
c.erase(pos) Удаляет элемент в позиции итератора pos и возвращает позицию следующего элемента
c.erase(beg,end) Удаляет все элементы из интервала [beg,end) и возвращает позицию следующего элемента
c.resize(num) Приводит контейнер к размеру num (если size() при этом увеличивается, новые элементы создаются своим конструктором по умолчанию)
c.resize(num,elem) Приводит контейнер к размеру num (если size() при этом увеличивается, новые элементы создаются как копии elem )
с.cleаr() Удаляет все элементы (контейнер остается пустым)

  • элементы вставляются или удаляются в конце интервала;
  • на момент вызова емкость контейнера достаточно велика, чтобы операция выполнялась без перераспределения памяти;
  • группа элементов обрабатывается одним вызовом вместо нескольких последовательных вызовов.

Вставка и удаление элементов приводят к появлению недействительных ссылок, указателей и итераторов, ссылающихся на элементы после позиции вставки. Если вставка приводит к перераспределению памяти, то недействительными становятся все ссылки, итераторы и указатели. (Естественно, позиция в операциях вставки/удаления задается итератором.)

Векторы не поддерживают операции прямого удаления элементов с некоторым значением. Для этой цели применяется алгоритм. Например, следующая команда удаляет все элементы со значением val :

Эта конструкция описана на 107 шаге.

Следующий фрагмент удаляет из вектора только первый элемент с некоторым значением:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *