Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обобщеный алгоритм for_each, for_each() в С++ 
V
    Опции темы
compiler91
  Дата 24.6.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 18.6.2008
Где: Харьков, Украина

Репутация: нет
Всего: нет



Добрый день!
Возникают проблемы в использовании обобщенного алгоритма for_each().. Моя программа:
Код

#include <algorithm>
#include <iostream>
#include <vector>

template <typename type>
void print_element(type elem){ std::cout << elem << '\t';}

int main(void){
    std::vector<int> ivec;
    for(int i = 0; i < 10; ++i)
        ivec.push_back(i);
    fill_n(ivec.begin(), 3, 0);
    for_each(ivec.begin(), ivec.end(), print_element);
    return 0;
}

Не компилируется( Почему?
ошибка:main.cpp:13: error: no matching function for call to ‘for_each(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, <unresolved overloaded function type>)’
компилятор:  g++ (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
ос: Linux ( xubuntu 2.6.24-19-generic)
Заранее благодарен.




Это сообщение отредактировал(а) compiler91 - 24.6.2008, 21:27
PM MAIL   Вверх
bsa
Дата 24.6.2008, 21:39 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



compiler91, ты должен явно указать спецификацию шаблона print_element перед передачей в for_each:
Код
for_each(ivec.begin(), ivec.end(), print_element<int>);


Добавлено через 2 минуты и 3 секунды
хотя в твоем случае логично использовать copy вкупе с ostream_iterator:
Код
std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, "\t"));


Добавлено через 5 минут и 8 секунд
а вместо первого цикла и fill_n тебе рекомендую использовать:
Код
ivec.resize(10);
std::iota(ivec.begin()+3, ivec.end(), 3);

PM   Вверх
compiler91
Дата 24.6.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 18.6.2008
Где: Харьков, Украина

Репутация: нет
Всего: нет



bsa, огромное спасибо!  Не думал что дело в шаблонах..
fill_n(), я использовал для проверки работоспособности обобщенных алгоритмов вообще.. Но спасибо, теперь наши знания еще чуть-чуть пополнились)
---
Вопрос решен.
Просьба поднять репутацию bsa за ответ..

Это сообщение отредактировал(а) compiler91 - 24.6.2008, 21:50
PM MAIL   Вверх
Damarus
Дата 24.6.2008, 22:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Цитата(compiler91 @  24.6.2008,  22:47 Найти цитируемый пост)
Просьба поднять репутацию bsa за ответ..

Сделано.
PM MAIL ICQ Jabber   Вверх
rrrFer
Дата 24.6.2008, 22:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 0
Всего: 1



Цитата(bsa @  24.6.2008,  21:39 Найти цитируемый пост)
std::iota

что это?
PM MAIL WWW ICQ   Вверх
compiler91
Дата 24.6.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 18.6.2008
Где: Харьков, Украина

Репутация: нет
Всего: нет



Damarus, спасибо..
rrrFer, для использования iota, по совету гугла,  убрал std::  и дописал #include <backward/algo.h> (за что получил варнинг(  )

*варнинг
In file included from /usr/include/c++/4.2/backward/algo.h:59,
                 from main.cpp:4:
/usr/include/c++/4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.



Это сообщение отредактировал(а) compiler91 - 24.6.2008, 22:46
PM MAIL   Вверх
bsa
Дата 24.6.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



compiler91
Код
#include <numeric>
http://www.sgi.com/tech/stl/iota.html
PM   Вверх
compiler91
Дата 24.6.2008, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 18.6.2008
Где: Харьков, Украина

Репутация: нет
Всего: нет



bsa, не.. так у меня не проходит(...  Да и вообще мой numeric.h отличается от sgi.com-ового.. Но они вроде написали: This function is an SGI extension; it is not part of the C++ standard. ...

PM MAIL   Вверх
bsa
Дата 25.6.2008, 11:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(compiler91 @ 24.6.2008,  23:21)
bsa, не.. так у меня не проходит(...  Да и вообще мой numeric.h отличается от sgi.com-ового.. Но они вроде написали: This function is an SGI extension; it is not part of the C++ standard. ...

Сорри. Это то я и пропустил. smile
PM   Вверх
compiler91
  Дата 25.6.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 18.6.2008
Где: Харьков, Украина

Репутация: нет
Всего: нет



Цитата

Сорри. Это то я и пропустил. smile 
 еще раз спасибо за помощь.. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0825 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.