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

Метод remove_if STL - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Атрибуты прав при создании директории http://www.cyberforum.ru/cpp-beginners/thread641213.html
Пишу mkdir("dir0777",0777); mkdir("dir0770",0770); mkdir("dir0707",0707); mkdir("dir0077",0077); Для владельца - права устанавливаются правильно. Для группы и "остальных" - для всех директорий оказывается нет права на запись. В чём дурь?
C++ Бинарные деревья Имею три файла: Скажите пожалуйста почему я не могу создать э-т m?(Класс tree) Он мне пишет - undefined reference to `tree::~tree()' undefined reference to `tree::~tree()' ld returned 1 exit status Error 1 main.cpp # include "binaryTree.h" http://www.cyberforum.ru/cpp-beginners/thread641208.html
Организация цикла С++ C++
Добрый день. Нужно организовать ниже приведенный код таким образом чтобы программа никогда не выводила более 10 чисел в одной строке, и организовать это при помощи инструкции while или for, и без участия if (а также без логического оператора !, и арифметического оператора деление по модулю %). Как мне кажется, осуществить это можно при помощи вложений одного цикла в другой, но знаний для этого у...
Нужна подсказка в отладке C++
Здравствуйте! Не знаю как правильно сравнить вводимое число типа double (number_1) с символом '|' (29-30 строчка). Если ввести в формате |m после первого правильно введённого числа, то программа просто записывает первое значение во все последующие ячейки. Если ввести первым числом - программа зацикливается. Если ввести первым числом в формате 9|, то после 51 строки вылазит "This aplication...
C++ Функция поиска подстроки в строке http://www.cyberforum.ru/cpp-beginners/thread641136.html
int CChar::strpos(char* sub, char* str) { char* temp = new char; int t=0; for(int i=0; i<strlen(str); i++) { while(str==sub) temp = str;
C++ Генератор чисел числа до 100 помещаются в контейнер, перемешиваются и по нажатии <1>+Enter выводит на экран "генерирование число", после чего программа закрывается....что нужно добавить, что бы она не закрывалась и можно было дальше вводить <1>+Enter и получать новое "генерированные" числа? #include <iostream> #include <vector> #include <ctime> using namespace std; int main() { подробнее

Показать сообщение отдельно
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
22.08.2012, 21:30     Метод remove_if STL
много вариантов, можно например в таком духе

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
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>
#include <iterator>
 
class A {
public:
  bool predicat_delete (const int value) {
    return value > 3;
  }
};
 
int main () {
  A a;
 
  std::vector<int> v;
  v.push_back (4);
  v.push_back (3);
  v.push_back (2);
  v.push_back (5);
  v.erase (std::remove_if(v.begin(),
                          v.end(),
                          std::bind1st(std::mem_fun(&A::predicat_delete), &a)), v.end());
  std::copy (v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
}
правда bind* не переваривает ссылок, что исправлено в std::bind в с++11

Добавлено через 10 минут
если оно уже встроено в другой класс, то это тоже можно ообойти

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
33
34
35
36
37
38
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>
#include <iterator>
 
class A {
public:
  bool predicat_delete (const int& value) { 
    return value > 3;
  } 
};
 
namespace {
  typedef bool (A::*checker)(const int&);
  struct DeleteFunctor {
    DeleteFunctor (A& _a, checker _check) : a(_a), check(_check) {}
    bool operator ()(const int& value) { return (a.*check)(value); }
  private:
    A& a;
    checker check;
  };
}
 
int main () {
  A a;
 
  std::vector<int> v;
  v.push_back (4);
  v.push_back (3);
  v.push_back (2);
  v.push_back (5);
 
  v.erase (std::remove_if(v.begin(), 
                          v.end(), 
                          DeleteFunctor(a, &A::predicat_delete)), v.end());
  std::copy (v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
}
 
Текущее время: 08:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru