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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Amazonka
0 / 0 / 0
Регистрация: 26.02.2009
Сообщений: 26
#1

Вектор, дек, список - C++

11.05.2009, 18:08. Просмотров 2094. Ответов 5
Метки нет (Все метки)

Здравствуйте. Помогите пожалуйста разобраться в ошибках, которые возникают при компиляции. Вот они
145 C:\Documents and Settings\Инга\Рабочий стол\С и С++\Шаблоны+таблица+библиотеки\Копия Копия Библиотека\Библиотека\ы.cpp no match for 'operator+' in '(&sl)->std::list<_Tp, _Alloc>::begin [with _Tp = int, _Alloc = std::allocator<int>]() + left'
note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_bvector.h:261 candidates are: std::_Bit_iterator std::operator+(ptrdiff_t, const std::_Bit_iterator&)
note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_bvector.h:261 std::_Bit_const_iterator std::operator+(ptrdiff_t, const std::_Bit_const_iterator&)
146 C:\Documents and Settings\Инга\Рабочий стол\С и С++\Шаблоны+таблица+библиотеки\Копия Копия Библиотека\Библиотека\ы.cpp no match for 'operator+' in '(&sl)->std::list<_Tp, _Alloc>::begin [with _Tp = int, _Alloc = std::allocator<int>]() + right'
note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_bvector.h:261 candidates are: std::_Bit_iterator std::operator+(ptrdiff_t, const std::_Bit_iterator&)
note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_bvector.h:261 std::_Bit_const_iterator std::operator+(ptrdiff_t, const std::_Bit_const_iterator&)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <vector>
#include <list>
#include <deque>
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
    vector<int>v;
    vector<float>vvector;
list<int>sl;
list<float>sllist;
deque<int> dq;
 deque<float> dqdeque;
    int action;
    int element,left,right;
        cout<<"1.Vektor"<<endl;
        cout<<"2.Dek"<<endl;
        cout<<"3.Spisok"<<endl;
        cin>>action;
if (action == 1)
do{
    
        cout<<"1. Vstavka elementa"<< endl;
        cout<<"2. Sodergimoe"<< endl;
        cout<<"3.Udalenie" << endl;
        cin>>action;
    
        switch(action)
{
    case 1:
cout<<"Vvedite element"<< endl;
cin>>element;
cout << "Wyberite, kuda wstawljat': 1 - w konez, 2 - w proizwol'noe mesto. ";
cin>>action;
if(action==2)
{
        cout << "Wwedite posiziu, kuda hotite wstawit': " << endl;
        cin >> action;
}   
    else
    v.push_back(element);// иначе добавляем в конец элементы
            break;
case 2:
//system("CLS");
{   cout << "SODERGIMOE"<<endl;
        vector<int>::iterator k = v.begin();
        while(k!=v.end())           
        {
            cout << *k<< endl; 
            k++;
        }//return 0;
break;
}
    case 3:
    cout << "Wwedite left granizu udalenija: " << endl;
    cin >> left;
    cout << "Wwedite prawuju granizu udalenija: " << endl;
    cin >> right;
vector<int>::iterator r=v.begin() + left;
vector<int>::iterator s=v.begin() + right;
v.erase(s,r);
system("CLS");
    break;
        }
}
        while(action!=3);
if (action == 2)
do{
    
        cout<<"1. Vstavka elementa"<< endl;
        cout<<"2. Sodergimoe"<< endl;
        cout<<"3.Udalenie" << endl;
        cin>>action;
    
        switch(action)
{
    case 1:
//system("CLS");
cout<<"Vvedite element"<< endl;
cin>>element;
cout << "Wyberite, kuda wstawljat': 1 - w konez, 2 - w nachalo.. ";
cin>>action;
if(action==1)
dq.push_back(element);
if(action==2)
dq.push_front(element);
break;
case 2:
{   cout << "SODERGIMOE"<<endl;
deque<int>::iterator k = dq.begin();
        while(k!=dq.end())          
        {
            cout << *k<< endl; 
            k++;
        }break;
}
case 3:
cout << "Wwedite left granizu udalenija: " << endl;
    cin >> left;
    cout << "Wwedite prawuju granizu udalenija: " << endl;
    cin >> right;
deque<int>::iterator r=dq.begin() + left;
deque<int>::iterator s=dq.begin() + right;
dq.erase(s,r);
system("CLS");
    break;
        }
}
        while(action!=3);
if (action ==3)
//{ 
//system("CLS");
do{
    
        cout<<"1. Vstavka elementa"<< endl;
        cout<<"2. Sodergimoe"<< endl;
        cout<<"3.Udalenie" << endl;
        cin>>action;
    
        switch(action)
{
    case 1:
//system("CLS");
cout<<"Vvedite element"<< endl;
cin>>element;
cout << "Wyberite, kuda wstawljat': 1 -  w nachalo. ";
cin>>action;
if(action==1)
sl.push_back(element);
break;
case 2:
{   cout << "SODERGIMOE"<<endl;
list<int>::iterator k = sl.begin();
        while(k!=sl.end())          
        {
            cout << *k<< endl; 
            k++;
        }break;
}
cout << "Wwedite left granizu udalenija: " << endl;
    cin >> left;
    cout << "Wwedite prawuju granizu udalenija: " << endl;
    cin >> right;
list<int>::iterator r=sl.begin() + left;
list<int>::iterator s=sl.begin() + right;
sl.erase(s,r);
system("CLS");
    break;
        }
}
        while(action!=3);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2009, 18:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вектор, дек, список (C++):

Односвязный список типа дек - C++
Помогите с заданием, спасибо Создать класс для реализации однозвьязного списка с динамическим выделением памяти типа &quot;дек&quot; и методы...

Список и вектор - C++
Привет всем, помогите, пожалуйста, разобраться с парой вещей: 1) есть список указателей. К каждому элементу необходимо применит метод...

Реализовать односвязный список и вектор - C++
Array.h (описание классов) #ifndef ARRAY// if not defined #define ARRAY Class ARRAY{ Public ARRAY(); ~ ...

Вектор или связный список есть ли разница? - C++
В примерах видел использование что то вроде struct List { // ....... List * next; //....... vector &lt; List * &gt;...

Ввести из файла неориентированный нагруженный граф в список смежности, используя вектор векторов - C++
Доброго времени суток, уважаемые форумчане. Нуждаюсь в вашей помощи) Необходимо ввести из файла неориентированный нагруженный граф в...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

5
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
11.05.2009, 18:10 #2
сократи код до минимума, чтобы проявлялась ошибка и кидай сюда.
0
Amazonka
0 / 0 / 0
Регистрация: 26.02.2009
Сообщений: 26
11.05.2009, 19:28  [ТС] #3
Rififi, вот сокращённый код. Компилятор ругается на 44 и 45 строчку
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
#include <list>
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
list<int>sl;
list<float>sllist;
    int action;
    int element,left,right;
        cout<<"1.Vektor"<<endl;
        cout<<"2.Dek"<<endl;
        cout<<"3.Spisok"<<endl;
        cin>>action;
 
if (action ==3)
do{     cout<<"1. Vstavka elementa"<< endl;
        cout<<"2. Sodergimoe"<< endl;
        cout<<"3.Udalenie" << endl;
        cin>>action;
        switch(action)
{
    case 1:
cout<<"Vvedite element"<< endl;
cin>>element;
cout << "Wyberite, kuda wstawljat': 1 -  w nachalo. ";
cin>>action;
if(action==1)
sl.push_back(element);
break;
case 2:
{   cout << "SODERGIMOE"<<endl;
list<int>::iterator k = sl.begin();
        while(k!=sl.end())          
        {
            cout << *k<< endl; 
            k++;
        }break;
}
cout << "Wwedite left granizu udalenija: " << endl;
    cin >> left;
    cout << "Wwedite prawuju granizu udalenija: " << endl;
    cin >> right;
list<int>::iterator r=sl.begin() + left;
list<int>::iterator s=sl.begin() + right;
sl.erase(s,r);
system("CLS");
    break;
        }
}   while(action!=3);
    return 0;
}
0
Sender Ghost
9 / 9 / 1
Регистрация: 17.05.2008
Сообщений: 12
13.05.2009, 01:04 #4
Здравствуйте. Ответы в комментариях.
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <conio.h>
#include <list>
 
using namespace std;
 
int main()
{
    list<int> sl;
    list<float> sllist;
    int action,
        element, left, right;
 
    cout << "1.Vektor" << endl;
    cout << "2.Dek" << endl;
    cout << "3.Spisok" << endl;
    cin >> action;
    
    if (action == 3)
        do
        {
            cout << "1. Vstavka elementa" << endl;
            cout << "2. Sodergimoe" << endl;
            cout << "3. Udalenie" << endl;
            cin >> action;
            
            switch (action)
            {
                case 1: {
                    cout << "Vvedite element" << endl;
                    cin >> element;
                    cout << "Wyberite, kuda wstawljat': 1 -  w nachalo. ";
                    cin >> action;
 
                    if (action == 1)
                        sl.push_back(element);
                } break;
                case 2: {
                    cout << "SODERGIMOE" << endl;
 
                    list<int>::iterator k = sl.begin();
 
                    while (k != sl.end())
                    {
                        cout << *k << endl;
                        k++;
                    }
                } break;
                case 3: {
                    int size = sl.size();
 
                    if (size == 0) { action = 1; break; }
 
                    cout << "Wwedite left granizu udalenija: " << endl;
                    cin >> left;
                    cout << "Wwedite prawuju granizu udalenija: " << endl;
                    cin >> right;
                    
                    if (left > right) // Меняем границы местами
                    {
                        int tmp = left;
                        left = right;
                        right = tmp;
                    }
                    else if (left == right) // Нет интервала [left, right)
                    {
                        action = 1; break;
                    }
 
                    if (left > size) left = size;
                    else if (left < 0) left = 0;
 
                    if (right > size) right = size;
                    else if (right < 0) right = 0;
                    
                    list<int>::iterator l, r;   l = r = sl.begin();
 
                    advance(l, left);  // перемещение позиции итераторов на left
                    advance(r, right); // и right шагов.
 
                    sl.erase(l, r);
 
                    system("CLS");
                } break;
            }
        }
        while (action != 3); // Почему не "4. Exit"?
 
    return 0;
}
1
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
13.05.2009, 01:21 #5
Amazonka,
Компилятор ругается на 44 и 45 строчку
так делать нельзя, потому что контейнер std::list возвращает двунаправленные итераторы (могут перемещаться вперед/назад через операции ++/--), а вот это:
sl.begin() + left
возможно только с итераторами произвольного доступа
1
Amazonka
0 / 0 / 0
Регистрация: 26.02.2009
Сообщений: 26
15.05.2009, 22:33  [ТС] #6
Sender Ghost , спасибо вам огромное. Rififi , спасибо за разъяснение.
0
15.05.2009, 22:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2009, 22:33
Привет! Вот еще темы с ответами:

Мне нужно ввести в программу данные с помощью ifstream и добавить их всех в вектор чтобы был список. - C++
Доброго времени суток. У меня есть класс Студенты. Мне нужно ввести в программу данные о них(ID, имя, фамилия, возраст) с помощью ifstream...

Можно ли передать в функцию либо вектор, либо список, если да, то как? - C++
Можно ли передать в функцию либо вектор, либо список, если да, то как?

дек - C++
как сделать такую вещь? реализовать и протестировать контейнерный класс динамической структуры данных такой как дек. класс должен иметь...

Простой дек - C++
Помогите решить задачу : Реализуйте структуру данных &quot;дек&quot;. Напишите программу, содержащую описание дека и моделирующую работу дека,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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