Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 17.05.2021
Сообщений: 4

Шаблонная функция для поиска в stl-контейнерах

17.05.2021, 20:57. Показов 2114. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня возникли проблемы при выполнении следующего задания. Нужно создать шаблонную функцию для поиска в STL-контейнерах, параметры шаблона – тип итератора (итераторы в параметрах функции указывают на начало и конец контейнера) и
тип искомой величины. Инстанцировать для массива строк (где строка – это свой класс,
изготовленный из vector<char> с переопределенными операциями необходимыми для
работы функции поиска, в частности, оператор проверки на равенство). Может кто подсказать пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2021, 20:57
Ответы с готовыми решениями:

Шаблонная функция вывода для любого stl контейнера
Шаблонная функция вывода для любого STL-контейнера, где в качестве параметра должен быть тип контейнера. Собственно реализация довольна...

Шаблонная функция поиска, перегруженное сравнение
Есть два класса Student и Prepod оба наследуются от People. В list хранятся ссылки list&lt;People*&gt; Операторы сравнения перегрузил. Хочу...

Шаблонная функция поиска максимального из 5 элементов
Помогите найти ошибку(и) Условие: Напишите шаблонную функцию max5(), которая принимает в качестве аргумента массив из пяти элементов...

3
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
17.05.2021, 22:01
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
29
30
31
32
33
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
using namespace std;
namespace my_sweet_dreams
{
template<typename Fwd_it>
Fwd_it
find(Fwd_it left, Fwd_it right,
     const typename iterator_traits<Fwd_it>::value_type& val)
    { 
        while(left!=right)
        {
            if(*left==val) break;
            ++left;
        }
        return left;
    }
}
 
 
int main()
{
    string mama="mama";
    auto find_a= my_sweet_dreams::find(mama.begin(), mama.end(), 'a');
    cout<<*find_a<<" has found at "<<(find_a-mama.begin())<<endl;
    string papa="papa", me="me";
    vector<string>vs{mama, me, papa};
    auto find_me= my_sweet_dreams::find(vs.begin(), vs.end(), "me");
    cout<<*find_me<<" has found at "<<(find_me-vs.begin())<<endl;
    return 0;
}
класс строк напишите сами. Реализуйте в нём итераторы. Определите тип значения.
1
0 / 0 / 0
Регистрация: 17.05.2021
Сообщений: 4
17.05.2021, 23:50  [ТС]
У меня часть получилось, а на итераторах туплю что-то


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
29
class String
{
private:
char* str;
public:
String();
 
vector <char> :: iterator <begin()>;
vector <char> :: iterator <end()>;
 
String operator==(String &obj2){
if( strcmp(str,obj2.str)){
cout<<"Не равны!"<<endl;
cout<<str;
cout<<obj2.str;
}
else
cout<<"Равны!"<<endl;
}
 
String operator!=(String &obj2){
strcmp(str,obj2.str);
if( !strcmp(str,obj2.str)){
cout<<"Равны!"<<endl;
}
else
cout<<"Не равны!"<<endl;
}
};
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.05.2021, 00:14
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
namespace my_sweet_dreams
{
template<typename Fwd_it>
Fwd_it
find(Fwd_it left, Fwd_it right,
     const typename iterator_traits<Fwd_it>::value_type& val)
    {
        Fwd_it start=left;
 
        while(start!=right)
        {
            if(*start==val) break;
            ++start;
        }
        return start;
    }
}
 
class Stringer
{
  public:
   operator==(const Stringer &other)
   {
       return data == other.data;
   }
   using iterator = vector<char>::iterator;
   using const_iterator = vector<char>::const_iterator;
 
   iterator begin(){return data.begin();}
   iterator end(){return data.end()-1;}
 
   const_iterator cbegin()const{return data.cbegin();}
   const_iterator cend()const{return data.cend()-1;}
 
   Stringer(const string &str=string{})
   {
     copy(str.begin(), str.end(), back_inserter(data));
     data.push_back('\0');
   }
   size_t size(){ return data.size()-1; }
   const char *str()const{return data.data() ;}
private:
 vector<char> data;
 
};
 
int main()
{
    string mama="mama";
    auto find_a= my_sweet_dreams::find(mama.begin(), mama.end(), 'a');
    cout<<*find_a<<" has found at "<<(find_a-mama.begin())<<endl;
    string papa="papa", me="me";
    vector<string>vs{mama, me, papa};
    auto find_me= my_sweet_dreams::find(vs.begin(), vs.end(), "me");
    cout<<*find_me<<" has found at "<<(find_me-vs.begin())<<endl;
 
    Stringer Str("brother");
    for(auto c:Str)cout<<c;
    cout<<endl;
    cout<<Str.str()<<endl;
    auto find_o= my_sweet_dreams::find(Str.begin(), Str.end(), 'o');
    cout<<*find_o<<" has found at "<<(find_o-Str.begin())<<endl;
    find_o= my_sweet_dreams::find(Str.begin(), Str.end(), 'm');
if(find_o==Str.end())cout<<"m not found";
 
    return 0;
}
EdmontonOilers, вообще, везде нужно бы проверять не вернулся ли конец строчки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2021, 00:14
Помогаю со студенческими работами здесь

Шаблонная функция для vector
Как реализовать шаблонную функцию для vector

Стандартные функции поиска элементов в контейнерах
Какие есть стандартные библиотеки/ф-ции поиска в с++? Нашел find(), но не совсем понятна его работа. Как я понял, он возвращает итератор на...

Шаблонная функция для двумерного массива
Всем дорого здравия! Насколько безопасно использовать такую функция и для статических и для динамических массивов: #include...

Шаблонная функция для побайтового сдвига
Добрый день. Есть функция для побайтового сдвига для элементов из массива:template&lt;typename T, int start, int length&gt; static T...

Шаблонная функция для вывода контейнеров
Нужно написать шаблонную функцию, которая будет выводить set, vector или map.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru