Описание тега 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>>
У меня есть вектор векторов, представляющий массив. Я хотел бы удалить строки эффективно, то есть с минимальной сложностью и распределениями Я думал о создании нового вектора векторов, копировании только не удаленных строк, используя семантику перем…
10 апр '14 в 16:30
2
ответа
Вектор содержит объекты класса. Объект класса содержит 3 строки на объект. Как найти конкретную строку, а затем удалить весь элемент?
У меня есть класс, который содержит 3 элемента, например, {имя_первой, фамилия, телефон} У меня есть вектор, который содержит этот набор информации. Каким образом я мог бы искать отдельный элемент набора, например find(last_name), и удалить все элем…
21 окт '15 в 07:28
3
ответа
C++ вложенный в цикл с удаляемыми элементами
Я хотел бы проверить все элементы вектора друг против друга. Проверяя условие, элемент должен быть удален. Один из подходов заключался в удалении элементов с помощью вложенных циклов for (int a = 0; a < rs.size(); a++) { Point A = rs[a]; for (int…
04 янв '19 в 12:29
3
ответа
Идиома стирания-удаления: что происходит, когда удаляется возвратный итератор?
Я получил этот вопрос, когда я читал erase-remove idiom (пункт 32) из книги Скотта Мейерса "Эффективный STL". vector<int> v; ... v.erase(remove(v.begin(), v.end(), 99), v.end()); remove в основном возвращает "новый логический конец" и элемен…
05 ноя '09 в 04:32
1
ответ
C++ удаляет неалфавитные символы из начала слова
У меня есть следующий код в методе строкового типа, который читает слова из файла, удаляет все неалфавитные символы (как показано ниже) из начала слова и возвращает их после этого. После распечатки результатов в основном методе, я заметил, что, хотя…
07 ноя '15 в 07:16
1
ответ
Почему идиома удаления-удаления не работает для обратного итератора
Моей целью было попытаться решить этот вопрос: удалить все пустые элементы в векторе с конца. используя стирание-удаление идиомы. Идея состоит в том, чтобы удалить все элементы, начиная с конца, которые являются пустыми (равными пробелу) в данном st…
01 май '18 в 07:51
1
ответ
Что происходит с элементом при использовании remove_if?
Я пытаюсь понять как remove_if работает (<< перегружен) и для этого я хочу удалить все строки, которые начинаются с 'C': vector<string> langs = { "Python", "C++", "C", "Java", "C#" }; cout << "Initial vector: " << langs <&…
24 фев '18 в 07:26
2
ответа
Доступ к итератору for_each из лямбды
Можно ли получить доступ к итератору std::for_each, чтобы я мог удалить текущий элемент из списка std:: list с помощью лямбды (как показано ниже) typedef std::shared_ptr<IEvent> EventPtr; std::list<EventPtr> EventQueue; EventType evt; ..…
28 июн '12 в 14:10
1
ответ
Можно ли расширить идиому "стереть-удалить" для одновременной работы с несколькими контейнерами?
В C++ идиома erase-remove - отличный способ удалить все элементы стандартного контейнера, которые удовлетворяют заданному критерию. Можно ли расширить идиому удаления-удаления, чтобы работать с несколькими контейнерами одновременно? То есть можно ли…
20 фев '16 в 02:09
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<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