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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как пользоваться адаптером функции, в связке с find_if 
V
    Опции темы
zim22
Дата 18.3.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Необходимо найти первую строку, размер которой совпадает с заданным.
С помощью своего объекта-функции я это делать умею.
Но как с помощью встроенного equal_to сравнить размер строк - я не знаю... 
зы: я и сам знаю, что сравниваю строку с числом, и поэтому не работает smile 
У меня есть мысль, что необходимо передавать не строку, а размер строки. Тогда стравнение будет работать. Но опять же, как размер строки передавать..  smile 
Код
#include <functional>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

class Equal_cls {
public:
    Equal_cls(size_t s) : size(s) { }
    bool operator()(const std::string &str)
    {
        return str.size() == size;
    }
private:
    size_t size;
};

int main(int argc, char *argv[])
{
    vector<string> vs;
    vs.push_back("i");
    vs.push_back("love");
    vs.push_back("you");
        
    vector<string>::iterator it = find_if(vs.begin(), vs.end(), bind2nd(equal_to<string>(), 3)); // ошибка
    //vector<string>::iterator it = find_if(vs.begin(), vs.end(), Equal_cls(1)); // работает отлично!
    
    
    return 0;
}






--------------------
PM MAIL   Вверх
vinter
Дата 18.3.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(zim22 @  18.3.2009,  14:15 Найти цитируемый пост)
Но как с помощью встроенного equal_to сравнить размер строк - я не знаю... 

в данном случае никак, используй свой функтор


--------------------
Мой блог
PM MAIL WWW   Вверх
zim22
Дата 18.3.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(vinter @  18.3.2009,  13:36 Найти цитируемый пост)
в данном случае никак,

это упражнение из книжечки. я не думаю, что они дурят. вот:
"Примените вместо класса Equal_cls библиотечные объекты функций для поиска слов определенной длины."
in english: "Use library function objects in place of Equal_cls to find the words of a specified length."



--------------------
PM MAIL   Вверх
Rififi
Дата 18.3.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



zim22, 
это не будет работать, потому что equal_to сравнивает обьекты string и ничего не знает про метод size()
надо байндить функцию size у класса string (basic_string), а не сам обьект класса. в stl штатных средств для этого нет

с boost будет наверное так (не проверял):

boost::bind(std::equal_to<std::string::size_type>(), boost::bind(&std::string::size, _1), 3);
или
boost::bind(&std::string::size, _1) == 3
PM MAIL   Вверх
zim22
Дата 18.3.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Rififi, ясно. STL оказался не всемогущ  smile 


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

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

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

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

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


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

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


 




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


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

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