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

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

Войти
Регистрация
Восстановить пароль
 
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
#1

Удаление элементов из vector; bind или not1 - C++

07.08.2013, 17:31. Просмотров 584. Ответов 4
Метки нет (Все метки)

Как правильно забиндить, - сделать аналог, как через лямбду. Или же тут больше подойдет использование not1 (или not2). Не могу сам разобраться. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
 
class A
{
    std::string m_ext;
public:
    A(const char* e) : m_ext(e) {}
    std::string extension() const {return m_ext;}
    void print() const {std::cout << m_ext << std::endl;}
};
 
using namespace std::placeholders;
 
int main()
{
    std::vector<A> v {"txt", "txt", "pro", "pro", "jpg"};
    for (auto& a : v) a.print();
    
    //в векторе должны остаться только объекты с именем "pro"
    //v.erase(std::remove_if( v.begin(), v.end(), [](const A& a){return a.extension() != "pro";}), v.end());
    v.erase(std::remove_if( v.begin(), v.end(), std::bind(&A::extension, std::not_equal_to<A>, _1, _2, "pro") ), v.end());
    //v.erase(std::remove_if( v.begin(), v.end(), std::not1(std::mem_fn(&A::extension), _1, "pro") ), v.end());
    
    std::cout << std::endl;
    for (auto& a : v) a.print();
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 17:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элементов из vector; bind или not1 (C++):

Bind vector<vector<A*>> - C++
Привет всем ! вот код struct A { void qwer(int a) { qDebug()&lt;&lt;a; } }; int main(int argc, char...

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

Удаление элементов из std::vector - C++
У меня есть класс Zone. Но объявлен как массив vector в другом классе. class World { public: std::vector&lt;Zone*&gt;Zones; ... ...

Удаление первых n элементов из vector - C++
Почему, к примеру, если k=3 а pop=2, то студия выдаст ошибку(итератор вне допустимого диапазона) при запуске функции erase. По моей логике,...

Vector, список. Удаление и вставка элементов - C++
Из входного потока сформировать вектор вещественных чисел. Удалить из вектора все элементы, у которых дробная часть &lt; 0.5. Перед каждым...

vector<Struct2{int,vector<struct1>}> или множественное наследование ... - C++
Здравствуйте! Помогите, пожалуйста. Есть такие данные: typedef struct { int x; int y; // координаты...

4
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
07.08.2013, 17:59 #2
Непростая конструкция получилась, прямо-таки иллюстация пользы лямбд:
C++
1
2
3
4
v.erase( std::remove_if( v.begin(),
                         v.end(),
                         std::bind( std::not_equal_to< std::string >(), std::bind( &A::extension, _1), "pro" ) ),
         v.end() );
2
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
07.08.2013, 18:13 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
 
class A
{
    std::string m_ext;
public:
    A(const char* e) : m_ext(e) {}
    std::string extension() const {return m_ext;}
    void print() const {std::cout << m_ext << std::endl;}
    operator std::string() { return extension(); }
};
 
using namespace std::placeholders;
 
int main()
{
    std::vector<A> v {"txt", "txt", "pro", "pro", "jpg"};
    for (auto& a : v) a.print();
    v.erase(std::remove_if( v.begin(), v.end(), std::bind(std::not_equal_to<std::string>(), _1, "pro")), v.end());
    std::cout << std::endl;
    for (auto& a : v) a.print();
 
    return 0;
}
1
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.08.2013, 18:24  [ТС] #4
Цитата Сообщение от Olivеr Посмотреть сообщение
operator std::string()
А это перегрузка чего?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
07.08.2013, 18:24 #5
DiffEreD, приведение типа A к типу std::string
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2013, 18:24
Привет! Вот еще темы с ответами:

Записать числа из файла в двумерный массив или вектор вроде такого vector<vector<int>> - C++
Добрый день, подскажите пожалуйста как лучше и проще считывать файл. в файле записаны числа, разделенные пробелами и запятыми: 1, 2, 3,...

Использование отрицателя not1 - C++
Почему выдает ошибку вот такой фрагмент программы? deque &lt;book&gt; :: iterator i2 = find_if (i1, deq.end(), not1 (Pred_year(year_for_del)));...

Удаление элемента из vector - C++
Подскажите как удалить 1 элемент из массива типа vector, delete не работает почему-то?

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


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
07.08.2013, 18:24
Ответ Создать тему
Опции темы

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