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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
#1

Функция find - C++

28.08.2011, 21:11. Просмотров 2208. Ответов 3
Метки нет (Все метки)

Почему

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
#include <iostream>
#include <iterator>
#include <string>
#include <algorithm>
using namespace std;
 
template<typename first, typename second>
int find2(first str, second to_find)
{
    int n=0;
    typename first::const_iterator ite=find(str.begin(),str.end(),to_find);
    while(ite!=str.end())
    {
        n++;
        ite++;
        ite=find(ite,str.end(),to_find); //ТАК
    }
 
    return n;
};
 
 
int main()
{
    string str="string's";
    char t='s';
    cout<<find2(str,t);
}
нельзя?
Ведь когда я писал не шаблонную функцию то при передаче поиску моего итератора в виде первого аргумента всё было ок, но стоило мне сделать мою функцию шаблоном как тут же появилась ошибка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2011, 21:11     Функция find
Посмотрите здесь:

оператор find в stl C++
C++ Find из string.h
C++ Как использовать функции string::find или функция strstr(str1 ,str2)
Функция find C++
C++ find() from string!
STL find C++
C++ Функция find
STL.Find() C++
Как минимально просто использовать функция std::find с последовательность типа : list<myClass*> C++
Cannot find -lbgi C++
C++ Некорректная работа Map.find
Std::multiset::find C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
28.08.2011, 21:23     Функция find #2
просто ite и str.end() получились разными итераторами. Первый const, второй нет. Так что либо использовать для ite не константный итератор, либо указать функции find специализацию первого параметра явно.
Правда без typedef следующая запись выглядит жутковато:
C++
1
ite=find<typename first::const_iterator>(ite,str.end(),to_find);
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
28.08.2011, 21:27  [ТС]     Функция find #3
grizlik78, ага, вот в чём дело, вот так бы компилятор и написал бы, ато по той информации что он выдал сложно догадаться что было не так.
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
28.08.2011, 21:32     Функция find #4
Ну мне он примерно так и написал
error: no matching function for call to ‘find(std::basic_string<char>::const_iterator&, std::basic_string<char>::iterator, char&)’
Yandex
Объявления
28.08.2011, 21:32     Функция find
Ответ Создать тему
Опции темы

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