Как я удаляю объект из stl вектора с определенным значением?

Проверьте метод JSON.stringify()

Возможно, вы захотите сделать

JSON.stringify({"message": $('#msg').val(), "password": $('#pass').val()});

См. JSON.stringify

135
задан bradtgmurray 2 September 2008 в 16:14
поделиться

5 ответов

std::remove на самом деле не стирает элемент из контейнера, но он действительно возвращает новый конечный итератор, который может быть передан container_type::erase, чтобы сделать РЕАЛЬНОЕ удаление дополнительных элементов, которые являются теперь в конце контейнера:

std::vector<int> vec;
// .. put in some values ..
int int_to_remove = n;
vec.erase(std::remove(vec.begin(), vec.end(), int_to_remove), vec.end());
157
ответ дан 23 November 2019 в 23:46
поделиться

Используйте станд. глобального метода:: удалите с начальным и конечным итератором и затем используйте станд.:: vector.erase для фактического удаления элементов.

Ссылки на документацию
станд.:: удалите http://www.cppreference.com/cppalgorithm/remove.html
станд.:: vector.erase http://www.cppreference.com/cppvector/erase.html

std::vector<int> v;
v.push_back(1);
v.push_back(2);

//Vector should contain the elements 1, 2

//Find new end iterator
std::vector<int>::iterator newEnd = std::remove(v.begin(), v.end(), 1);

//Erase the "removed" elements.
v.erase(newEnd, v.end());

//Vector should now only contain 2

Благодаря Jim Buck для указания на мою ошибку.

15
ответ дан 23 November 2019 в 23:46
поделиться

Если у Вас есть неотсортированный вектор, то можно просто подкачать с последним векторным элементом затем resize().

С заказанным контейнером, Вы будете лучше всего выключены с ‍ std::vector::erase(). Обратите внимание, что существует std::remove() определено в <algorithm>, но это на самом деле не делает стирания. (Прочитайте документацию тщательно).

5
ответ дан 23 November 2019 в 23:46
поделиться

См. также станд.:: remove_if, чтобы смочь использовать предикат...

Вот пример из ссылки выше:

vector<int> V;
V.push_back(1);
V.push_back(4);
V.push_back(2);
V.push_back(8);
V.push_back(5);
V.push_back(7);

copy(V.begin(), V.end(), ostream_iterator<int>(cout, " "));
    // The output is "1 4 2 8 5 7"

vector<int>::iterator new_end = 
    remove_if(V.begin(), V.end(), 
              compose1(bind2nd(equal_to<int>(), 0),
                       bind2nd(modulus<int>(), 2)));
V.erase(new_end, V.end()); [1]

copy(V.begin(), V.end(), ostream_iterator<int>(cout, " "));
    // The output is "1 5 7".
2
ответ дан 23 November 2019 в 23:46
поделиться

Другие ответы касаются, как сделать это хорошо, но я думал, что также укажу, что это не действительно нечетно, что это не находится в векторном API: это - неэффективный, линейный поиск через вектор для значения, сопровождаемого набором копирования для удаления его.

при выполнении этой операции интенсивно это может быть станд. достойный рассмотрения:: набор вместо этого поэтому.

5
ответ дан 23 November 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: