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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
KEKCoGEN
Модератор
 Аватар для KEKCoGEN
1711 / 1589 / 386
Регистрация: 28.12.2010
Сообщений: 6,485
24.02.2011, 00:45     STL библиотека. Ф-ция for_each #1
При изучении 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. Все тоже самое....от чего может быть ошибка и как лечить?
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2011, 00:45     STL библиотека. Ф-ция for_each
Посмотрите здесь:

C++ Библиотека STL, класс вектор
Библиотека STL, класс ЛИСТ C++
C++ Стандартная библиотека C++ и STL
библиотека STL C++
Библиотека STL, + задача с её использованием C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
24.02.2011, 01:07     STL библиотека. Ф-ция for_each #2
C++
1
2
for_each(vec.begin(), vec.end(),
         bind1st(mem_fun(&Library::Func), this));
KEKCoGEN
Модератор
 Аватар для KEKCoGEN
1711 / 1589 / 386
Регистрация: 28.12.2010
Сообщений: 6,485
24.02.2011, 01:22  [ТС]     STL библиотека. Ф-ция for_each #3
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
2
for_each(vec.begin(), vec.end(),
         bind1st(mem_fun(&Library::Func), this));
Можно немного пояснений по-поваду этой конструкции? В msdn такого не нашёл
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
24.02.2011, 01:49     STL библиотека. Ф-ция for_each #4
KEKCoGEN, for_each предназначен для обычных функций, для функций членов нужно использовать адаптер, как указал rangerx
если оно работает, то круто конечно
KEKCoGEN
Модератор
 Аватар для KEKCoGEN
1711 / 1589 / 386
Регистрация: 28.12.2010
Сообщений: 6,485
24.02.2011, 01:57  [ТС]     STL библиотека. Ф-ция for_each #5
Все работает. Просто непонятен смысл такой конструкции.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
24.02.2011, 02:58     STL библиотека. Ф-ция for_each #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] )

както так
Yandex
Объявления
24.02.2011, 02:58     STL библиотека. Ф-ция for_each
Ответ Создать тему
Опции темы

Текущее время: 07:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru