С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
KEKCoGEN
Эксперт Java
1965 / 1840 / 442
Регистрация: 28.12.2010
Сообщений: 7,416
#1

STL библиотека. Ф-ция for_each - C++

24.02.2011, 00:45. Просмотров 1987. Ответов 5
Метки нет (Все метки)

При изучении STL, столкнулся со странным поведением ф-ции for_each библиотеки algorithm

C++
1
2
3
4
5
6
7
8
9
10
11
12
void Library::Func(int n)
{
    cout << "n is: "<<n << endl;
}
 
void Library::SearchWord(char* word)
{
    vector<int> vec;
    for(int i=0;i<3;i++)
        vec.push_back(i);
    for_each(vec.begin(),vec.end(),Func);
}
Обе ф-ции объявленны в Library.h в разделе public
декларации:
C++
1
2
void Func(int n);
void SearchWord(char* word);
При компиляции сего, вылезает ошибка
C++
1
error C3867: 'Library::Func': function call missing argument list; use '&Library::Func' to create a pointer to member
На строке for_each
Проверил в msdn. Все тоже самое....от чего может быть ошибка и как лечить?
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2011, 00:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL библиотека. Ф-ция for_each (C++):

Как можно получить итератор на элемент обрабатываемый в лямбде в функции for_each?STL - C++
Как можно получить итератор на элемент обрабатываемый в лямбде? for_each(arr.begin(), arr.end(), (char n) {if (n == dubl)...

библиотека STL - C++
Подскажите где можно почитать про библиотеку STL. Говорю сразу с английским не дружу((

Библиотека STL - C++
Добрый вечер, очень нуждаюсь в Вашей помощи. Пропустила тему и теперь не успеваю в ней раобраться.. Помогите пожалуйста переписать код...

Библиотека STL, сортировка - C++
Сортировка слов по количеству вхождений в слово его первой буквы... Можно какой-нибудь пример?? Можно не всю программу, а только...

Библиотека шаблонов STL - C++
Здравствуйте, как можно сформировать массив множеств ptr, который формируется из строки str = &quot;the best way of doing something well&quot;, а ptr...

Стандартная библиотека C++ и STL - C++
Вот нашел такие строки в книге Эккеля &quot;Философия С++&quot; В частности например класс vector автор относит к библиотеки С++, причем...

5
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
24.02.2011, 01:07 #2
C++
1
2
for_each(vec.begin(), vec.end(),
         bind1st(mem_fun(&Library::Func), this));
2
KEKCoGEN
Эксперт Java
1965 / 1840 / 442
Регистрация: 28.12.2010
Сообщений: 7,416
24.02.2011, 01:22  [ТС] #3
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
2
for_each(vec.begin(), vec.end(),
         bind1st(mem_fun(&Library::Func), this));
Можно немного пояснений по-поваду этой конструкции? В msdn такого не нашёл
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.02.2011, 01:49 #4
KEKCoGEN, for_each предназначен для обычных функций, для функций членов нужно использовать адаптер, как указал rangerx
если оно работает, то круто конечно
1
KEKCoGEN
Эксперт Java
1965 / 1840 / 442
Регистрация: 28.12.2010
Сообщений: 7,416
24.02.2011, 01:57  [ТС] #5
Все работает. Просто непонятен смысл такой конструкции.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.02.2011, 02:58 #6
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
class A{
public:
  void print( int val ){ std::cout << val << std::endl; }
};
 
int main(){
  std::vector<int> v;
  v.push_back( 1 );
  v.push_back( 2 );
  v.push_back( 3 );
  v.push_back( 4 );
 
  A a;
 
  mem_fun1_t<void, A, int> fun_t( &A::print );
  fun_t( &a, v[0] );
 
  mem_fun1_t<void, A, int> fun = mem_fun( &A::print ); 
  fun( &a, v[0] );
 
  bind1st( fun, &a )( v[0] );
 
  std::for_each( v.begin(), v.end(), bind1st( mem_fun( &A::print ), &a ) );
}
Bash
1
2
3
4
5
6
7
1
1
1
1
2
3
4
этот пример демонстрирует как это работает
mem_fun1_t - функтор, который позволяет вызвать функцию член &A:: print у объекта по адресу &a, передав в качестве аргумента v[0]

mem_fun - функция, которая генерирует функтор по функции члену. на самом деле идея в том, что она может создавать разные функторы, в зависимости от количества аргументов функции члена

bind1st - функция, создающая функтор из функции с двумя аргументами (mem_fun функция), подставляя в первый аргумент значения &a. получаем функтор, у которого есть оператор operator(), принимающий v[0], результат будет равносилен fun( &a, v[0] )

както так
2
24.02.2011, 02:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2011, 02:58
Привет! Вот еще темы с ответами:

Стандартная библиотека шаблонов (STL) - C++
Пожалуйста,помогите решить.. Написать программу, которая использует класс string для анализа строки, содержащей математическое...

библиотека STL, гарантированное планирование - C++
всем превед, траблы вот в чем, не могу удалить элемент контейнера vector с помощью erase критует, с указателями что то намутил может, а...

Библиотека STL, класс вектор - C++
Помогите написать прогу... вот задание: Использовать класс vector библиотеки STL для хранения каталога книг. Книги характеризуются...

Библиотека STL, + задача с её использованием - C++
Доброго времени суток, о существовании библиотеки шаблонов я узнал 2 недели назад. У меня есть задача: Но это глобальная задача,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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