Описание тега erase-remove-idiom

Идиома "стереть-удалить" - это распространенный метод C++ для удаления элементов, соответствующих определенному критерию, из контейнера стандартной библиотеки C++.
3 ответа

Использование erase-remove_if идиома

Допустим, у меня есть std::vector<std::pair<int,Direction>>, Я пытаюсь использовать erase-remove_if идиома для удаления пар из вектора. stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair sto…
18 авг '16 в 13:42
2 ответа

Возникли проблемы с vector.erase() и remove_if()

До использования remove_if я использовал remove. Скажем, если бы я имел vec = {1, 2, 2, 2, 5} и хотел удалить все 2, я бы сделал: for (vector<int>::iterator it = vec.begin(); it!= vector.end(); ++it){ if (*it == 2){ vec.erase(remove(vec.begin(…
06 ноя '15 в 16:45
2 ответа

Откуда происходит увеличение производительности идиомы удаления-удаления?

Мне нужно стереть все элементы из вектора, которые соответствуют определенным критериям. Моим первым подходом было бы перебрать вектор и вызвать vector::erase для всех элементов, которые соответствуют критериям. Насколько я понимаю, vector::erase им…
07 авг '17 в 16:04
1 ответ

Удаление символов из массива символов в C++

Я пытаюсь создать способ удалить подстроку из строки. Он в форме символа, поэтому я не могу использовать удобные средства, которые радостно передаются строкам. Я знаю, как его искать, я могу найти указатель, но удаление человека из чарса было для ме…
10 июл '18 в 01:10
4 ответа

Как эмулировать remove_unless

У меня есть код, чтобы удалить все элементы из std::vector<int> которые меньше чем некоторые int limit, Я написал несколько функций, которые частично применяют лямбда-выражения: auto less_than_limit = [](int limit) { return [=](int elem) { ret…
12 янв '16 в 17:52
5 ответов

Удалить векторные элементы на основе индекса

Я хотел удалить элементы вектора на основе индекса, скажем, все четные индексированные элементы. Я читал об идиоме удаления стирания, но не вижу, как ее применить. Вот что я попробовал: vector<int> line; line.reserve(10); for(int i=0;i<10;+…
08 дек '11 в 07:37
1 ответ

Удалить произвольный список элементов из std:: vector<std:: vector <T>>

У меня есть вектор векторов, представляющий массив. Я хотел бы удалить строки эффективно, то есть с минимальной сложностью и распределениями Я думал о создании нового вектора векторов, копировании только не удаленных строк, используя семантику перем…
2 ответа

Вектор содержит объекты класса. Объект класса содержит 3 строки на объект. Как найти конкретную строку, а затем удалить весь элемент?

У меня есть класс, который содержит 3 элемента, например, {имя_первой, фамилия, телефон} У меня есть вектор, который содержит этот набор информации. Каким образом я мог бы искать отдельный элемент набора, например find(last_name), и удалить все элем…
21 окт '15 в 07:28
3 ответа

C++ вложенный в цикл с удаляемыми элементами

Я хотел бы проверить все элементы вектора друг против друга. Проверяя условие, элемент должен быть удален. Один из подходов заключался в удалении элементов с помощью вложенных циклов for (int a = 0; a &lt; rs.size(); a++) { Point A = rs[a]; for (int…
3 ответа

Идиома стирания-удаления: что происходит, когда удаляется возвратный итератор?

Я получил этот вопрос, когда я читал erase-remove idiom (пункт 32) из ​​книги Скотта Мейерса "Эффективный STL". vector&lt;int&gt; v; ... v.erase(remove(v.begin(), v.end(), 99), v.end()); remove в основном возвращает "новый логический конец" и элемен…
05 ноя '09 в 04:32
1 ответ

C++ удаляет неалфавитные символы из начала слова

У меня есть следующий код в методе строкового типа, который читает слова из файла, удаляет все неалфавитные символы (как показано ниже) из начала слова и возвращает их после этого. После распечатки результатов в основном методе, я заметил, что, хотя…
07 ноя '15 в 07:16
1 ответ

Почему идиома удаления-удаления не работает для обратного итератора

Моей целью было попытаться решить этот вопрос: удалить все пустые элементы в векторе с конца. используя стирание-удаление идиомы. Идея состоит в том, чтобы удалить все элементы, начиная с конца, которые являются пустыми (равными пробелу) в данном st…
1 ответ

Что происходит с элементом при использовании remove_if?

Я пытаюсь понять как remove_if работает (&lt;&lt; перегружен) и для этого я хочу удалить все строки, которые начинаются с 'C': vector&lt;string&gt; langs = { "Python", "C++", "C", "Java", "C#" }; cout &lt;&lt; "Initial vector: " &lt;&lt; langs &lt;&…
24 фев '18 в 07:26
2 ответа

Доступ к итератору for_each из лямбды

Можно ли получить доступ к итератору std::for_each, чтобы я мог удалить текущий элемент из списка std:: list с помощью лямбды (как показано ниже) typedef std::shared_ptr&lt;IEvent&gt; EventPtr; std::list&lt;EventPtr&gt; EventQueue; EventType evt; ..…
28 июн '12 в 14:10
1 ответ

Можно ли расширить идиому "стереть-удалить" для одновременной работы с несколькими контейнерами?

В C++ идиома erase-remove - отличный способ удалить все элементы стандартного контейнера, которые удовлетворяют заданному критерию. Можно ли расширить идиому удаления-удаления, чтобы работать с несколькими контейнерами одновременно? То есть можно ли…
4 ответа

std::remove_if - лямбда, ничего не удаляя из коллекции

Хорошо, я ожидаю, что допустил глупую ошибку. У меня есть список DisplayDevice3d, и каждый DisplayDevice3d содержит список DisplayMode3d. Я хочу удалить все элементы из списка DisplayDevice3d, которые не имеют DisplayMode3d. Я пытаюсь использовать л…
18 дек '10 в 15:22
2 ответа

erase() после выполнения remove_if()

Я создал функцию для запуска вектора строк и удаления любых строк длиной 3 или менее. Это урок использования библиотеки алгоритмов STL. У меня проблемы с тем, что функции работают, но он не только удаляет строки длиной 3 или меньше, но также добавля…
29 янв '12 в 14:23
3 ответа

Гарантируется ли std::remove_if вызывать предикат по порядку?

Будет ли std::remove_if всегда вызывать предикат для каждого элемента по порядку (в соответствии с порядком итератора) или он может вызываться не по порядку? Вот игрушечный пример того, что я хотел бы сделать: void processVector(std::vector&lt;int&g…
08 авг '16 в 22:48
4 ответа

STL "erase-remove" идиома: почему не "изменить размер-удалить"?

Обычно считается, что это хороший способ полностью удалить нужные элементы из std::vector идиома стирания-удаления Как отмечено в приведенной выше ссылке (на дату публикации), в коде идиома удаления-удаления выглядит следующим образом: int main() { …
04 апр '14 в 10:24
1 ответ

Общая функция remove() vs Функция-член remove () для связанного списка

Я читаю книгу "C++ STL. Учебное пособие и ссылки", написанную Николаем М. Джозуттисом, и в одной из глав, посвященных алгоритмам STL, автор заявляет следующее: Если вы вызываете remove() для элементов списка, алгоритм не знает, что он работает со сп…
31 окт '18 в 12:58