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

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

Войти
Регистрация
Восстановить пароль
 
Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
#1

STL>>list<_Ty> - C++

19.12.2010, 13:59. Просмотров 767. Ответов 4
Метки нет (Все метки)

Подскажите, пожалуйста. Я сейчас пытаюсь вникнуть в суть контейнеров, их свойства и функции. Так вот, создал я двун. список с помощью list, тип определил свой, например _Ty. Добавление происходит четко, всё хорошо. После добавления решил, что нужно организовать поиск того узла. Задействовал функцию find() из algorithm, сделал сл. образом

C++
1
2
3
4
5
list<_Ty> ob1;
....
_Ty data(2,3); // какой-то там конструктор, например
return find(ob1.begin(),ob1.end(),data); // здесь, например возвращаю итератор
// но в find'е у меня ошибка, которую я не могу исправить..
Компилятор не может определиться с перегрузкой оператора == в данном блоке find():
C++
1
2
3
4
5
6
7
8
9
template<class _InIt,
    class _Ty> inline
    _InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val)
    {   // find first matching _Val
    for (; _First != _Last; ++_First)
        if (*_First == _Val) // !!!!!!!!!!!!!!!!!!
            break;
    return (_First);
    }
Выводит несколько вариантов перегрузки, типа или-или.
Хм.. Собственно вот. Подскажите, пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2010, 13:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL>>list<_Ty> (C++):

Работа с STL list + пропись List.h - C++
Здравствуйте! Помогите, пожалуйста, разобраться с STL list. Нужно сделать программу в которой будет содержаться класс Student, прописать...

Error C2664: Client::First: невозможно преобразовать параметр 1 из "std::queue<_Ty>" в "std::queue<_Ty> &" - C++
barbershop.h: #ifndef __BARBERSHOP_H__ #define __BARBERSHOP_H__ #include &lt;vector&gt; #include &lt;queue&gt; #include &quot;wantshaircut.h&quot; ...

STL list - C++
Доброго времени суток, пока имею поверхностное представление о алгоритмах STL и функциях для контейнеров, но есть задача: требуется...

STL list - C++
как вставить элемент в середину списка list STL? float list_insert_rand(int num) { srand (time(NULL)); int rand_num, rand_pos; ...

List STL - C++
В общем нужно создать класс STL c помощью list: CStudent.h #include &lt;string&gt; using namespace std; enum number_type{G1, G2,...

STL List - C++
Вот в чем проблема, была дана задача, решить которую надо было с помощью Deque и List, Deque надобыло оформить через STL, а List написать...

4
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
19.12.2010, 15:22 #2
по сабжу: вами должен быть переопределен оператор сравнения == для Ty, если тип не стандартный или POD
0
Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
19.12.2010, 16:18  [ТС] #3
А смысл? Существует функция find_if() для этого. К тому же перегрузок == так много, что компилятор в замешательстве. и не знает что вызвать.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
19.12.2010, 16:30 #4
Sasuke, Так. Поясню.
Этот код работать не будет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <list>
#include <algorithm>
 
struct something
{
    int first, second;
    something(int first_=0, int second_=0):
        first(first_), second(second_)
    {
    }
};
 
int main()
{
    const int n=10;
    std::list<something> Lst;
    //Заполнили
    something one(4, 5);
    std::list<something>::iterator It=std::find(Lst.begin(), Lst.end(), one);
    return 0;
}
А этот будет.

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
#include <iostream>
#include <list>
#include <algorithm>
 
struct something
{
    int first, second;
    something(int first_=0, int second_=0):
        first(first_), second(second_)
    {
    }
};
 
bool operator ==(const something& first, const something& second)
{
    if(first.first == second.first && 
        first.second == second.second)
        return true;
    return false;
}
 
int main()
{
    const int n=10;
    std::list<something> Lst;
    //Заполнили
    something one(4, 5);
    std::list<something>::iterator It=std::find(Lst.begin(), Lst.end(), one);
    return 0;
}
Добавлено через 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <list>
#include <algorithm>
 
struct something
{
    int first, second;
    something(int first_=0, int second_=0):
        first(first_), second(second_)
    {
    }
};
 
bool operator ==(const something& first, const something& second)
{
    if(first.first == second.first && 
        first.second == second.second)
        return true;
    return false;
}
 
std::ostream& operator <<(std::ostream& os, const something& one)
{
    os<<one.first<<' '
        <<one.second<<'\n';
    return os;
}
 
int main()
{
    const int n=10;
    std::list<something> Lst;
    for(int i=0; i<n; ++i)
    {
        Lst.push_back(something(i+1, i+2));
    }
    something one(4, 5);
    std::list<something>::iterator It=std::find(Lst.begin(), Lst.end(), one);
    if(It != Lst.end())
        std::cout<<*It<<'\n';
             else
                      std::cout<<"Not finded\n";
    return 0;
}
1
Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
19.12.2010, 16:46  [ТС] #5
ForEveR, странно, до этого делал перегрузку ==, и не помогало. А сейчас всё работает! Спасибо Вам огромное! +1
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2010, 16:46
Привет! Вот еще темы с ответами:

Работа с STL list - C++
Есть некий каталог с 3 переменными (string,string,int), который нужно хранить в list Как я понимаю есть 2 решения хранения. 1....

Работа с STL <list> - C++
В общем, есть текст, программа выделяет в тексте последовательность введённую с клавиатуры(выделяет скобками {}) Например выделить...

STL vector,list - C++
У меня 2 вопроса: 1) можете рассказать,как подробно работает reverse_iterator?Создал вектор,хочу его распечатать в обратном порядке...

stl::list erase() - C++
вот такой код есть, но не работает. как подправить? list&lt;int&gt; ls; list&lt;int&gt;::iterator it; for(int i=0; i&lt;5; i++) { ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
19.12.2010, 16:46
Ответ Создать тему
Опции темы

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