Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
wolf1396
6 / 6 / 6
Регистрация: 07.05.2013
Сообщений: 219
#1

Ошибка при запуске программы "vector iterator not incrementable"

13.01.2014, 14:10. Просмотров 842. Ответов 6
Метки нет (Все метки)

при запуске программы (без разницы какой функции) вылетает ошибка (заг. темы)
как это исправить?
мне кажется, что проблема в том, что я создаю класс (внутри функции) с неизвестным размером.
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
155
156
#include "stdafx.h"
#include <iostream>
#include <vector>
 
 
 
using namespace std;
//=============================
 
template <typename T> class Menge
{
private:
    vector <T> data;
public:
    Menge(int n=0)
    {
        if(n>0)
        {
            data.reserve(n);        
            cout << "Введите элементы множества: " << endl;
            T k;
            for(int i=0; i<n; i++)
            {
                cin >> k;
                data.push_back(k);
            }
        }
    }
    ~Menge()
    {
        data.clear();
    }
 
    //-------
    void print()
    {
        vector<T>::iterator it;
        cout << "vector: " << endl;
        for(it=data.begin(); it!=data.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
    }
    Menge Peresechenie(Menge& y)
    {
        Menge<T> res1;
        vector<T>::iterator it1, it2, it3;
        
        for (it1=data.begin(); it1!=data.end(); it1++)
        {
            for (it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if(*it1==*it2)
                {
                    res1.data.push_back(*it1);
                }
                else
                {
                    it2++;
                }
            }
        }
        return res1;
    }
 
 
    Menge Raznost(Menge& y)
    {
        Menge<T> res2;
        vector<T>::iterator it1=data.begin(), it2;
 
        for(it1; it1!=data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if (*it1==*it2)
                {
                    res2.data.push_back(*it1);
                }
            }
        }
        return res2;
    }
 
    /*Menge Obyedinenie(Menge y)
    {
        Menge<T> res;
        vector<T>::iterator it1;
        vector<T>::iterator it2;
        for(it1=data.begin(); it1!=data.end(); it1++)
        {
            res.data.push_back(it1);
        }
        for(it1=res.data.begin(); it1!=res.data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if (*it1!=*it2)
                {
                    res.data.push_back(*it2);
                }
            }
        }
        return res3;
    }*/
 
    Menge PryamoeProizvedenie(Menge& y)
    {
        Menge<T> res4;
        
        vector<T>::iterator it1, it2;
        for(it1=data.begin(); it1!=data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it1++)
            {
                res4.data.push_back((*it1)*(*it2));
            }
        }
 
        return res4;
    }
 
    
 
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    int a=5;
    int b=6;
    Menge<float> A(a);
    A.print();
    Menge<float> B(b);
    B.print();
    Menge<float> R1;
    cout << "Попытка вывести вектор: (пересечение)" << endl;
    R1=A.Peresechenie(B);
    R1.print();
    cout << "Попытка вывести вектор: (разность)" << endl;
    Menge<float> R2;
    R2=A.Raznost(B);
    R2.print();
    //cout << "Попытка вывести вектор: (объединение)" << endl;
    //Menge<float> R3;
    //R3=A.Obyedinenie(B);
    //R3.print();
    cout << "Попытка вывести вектор: (ПП)" << endl;
    Menge<float> R4;
    R4=A.PryamoeProizvedenie(B);
    R4.print();
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2014, 14:10
Ответы с готовыми решениями:

Vector iterator not incrementable
Здравствуйте. Подскажите, из-за чего не работает код? При запуске программы...

Синхронизация map и vector. Iterator not incrementable
День добрый. Надо синхронизровать vector и map, чтобы в них были только...

Перегрузка оператора "++" и "--" , компилирует, но при запуске программы - ошибка
#include &lt;iostream&gt; #include&lt;ctime&gt; #include&lt;stdio.h&gt; #include&lt;locale.h&gt;...

Исправить ошибку "Vector iterator not dereferancable"
Всех с наступающим Новым Годом! У меня возникла проблема с вот этой функцией...

Ошибка "iterator not dereferencable" при использовании ссылки
Всем привет. Без ссылки все работает, с ссылкой ошибка: &quot;iterator not...

6
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
13.01.2014, 14:29 #2
У вас
C++
1
2
private:
    vector <T> data;
а вы что делаете
C++
1
res1.data.push_back(*it1);
и так везде.
C++
1
2
3
Menge Peresechenie(Menge& y)
///...
y.data.begin();
используйте вместо
C++
1
vector<T>::iterator it1;
C++
1
typename vector<T>::iterator it1;
0
wolf1396
6 / 6 / 6
Регистрация: 07.05.2013
Сообщений: 219
13.01.2014, 15:47  [ТС] #3
Цитата Сообщение от egor2116 Посмотреть сообщение
У вас
C++
1
2
private:
    vector <T> data;
а вы что делаете
C++
1
res1.data.push_back(*it1);
и так везде.
C++
1
2
3
Menge Peresechenie(Menge& y)
///...
y.data.begin();
используйте вместо
C++
1
vector<T>::iterator it1;
C++
1
typename vector<T>::iterator it1;
1-что не так с res.data.push_back()?
я обращаюсь к вектору объекта res и заполняю необходимыми элементами
2-использовал, что должно было измениться?

Добавлено через 36 минут
я поменял, и теперь у меня возникает ошибка vector iterator not deferenceble

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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
 
 
 
 
using namespace std;
//=============================
 
template <typename T> class Menge
{
private:
    vector <T> data;
public:
    Menge(int n=0)
    {
        if(n>0)
        {
            data.reserve(n);        
            cout << "Введите элементы множества: " << endl;
            T k;
            for(int i=0; i<n; i++)
            {
                cin >> k;
                data.push_back(k);
            }
        }
    }
    ~Menge()
    {
        data.clear();
    }
    //-------
    //Вывод вектора
    void print()
    {
        vector<T>::iterator it;
        cout << "vector: " << endl;
        cout << "{ ";
        for(it=data.begin(); it!=data.end(); it++)
        {
            cout << *it << ", ";
        }
        cout << " }";
        cout << endl;
    }
    
    
    //Функция операции разность
    //в результирующий вектор будут записаны только те элементы,
    //которые есть в исходном векторе, но нет в переданном
    //(размер будет состоять из элементов мн-ва А минус элементы мн-ва B)
    Menge Raznost(Menge& y)
    {
        Menge<T> res;
        typename vector<T>::iterator it1=data.begin(), it2=y.data.begin();
 
        for(it1; it1!=data.end(); it1++)
        {       
            if (*it1!=*it2)
            {
                    res.data.push_back(*it1);
                    it2++;
            }
        }
        return res;
    }
    //-------------------------------
    //Функция операции пересечение
    //в результирующий вектор будут добавлены элементы,
    //которые есть и в исходном векторе, и в переданном функции
    //(размер будет состоять из кол-ва общих элементов мн-ва А и мн-ва B)
    Menge Peresechenie(Menge& y)
    {
        Menge<T> res;
        typename vector<T>::iterator it1=data.begin(), it2;
 
        for(it1; it1!=data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if (*it1==*it2)
                {
                    res.data.push_back(*it1);
                }
            }
        }
        return res;
    }
    //-------------------------------
    //Функция операции пересечение
    //в результирующий вектор будут добавлены элементы исходного вектора,
    //и элементы из 2, но не совпадают с элементами из 1
    //(размер будет состоять из суммы размеров мн-ва А и мн-ва B)
    Menge Obyedinenie(Menge& y)
    {
        Menge<T> res;
        typename vector<T>::iterator it1=data.begin();
        typename vector<T>::iterator it2=y.data.begin();
        for(it1=data.begin(); it1!=data.end(); it1++)
        {
            res.data.push_back(*it1);
        }
        typename vector<T>::iterator it3=res.data.begin();
        for(it3; it3!=res.data.end(); it3++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it2++)
            {
                if (*it3!=*it2)
                {
                    res.data.push_back(*it2);
                }
            }
        }
        return res;
    }
    //-------------------------------
    //Функция операции прямое произведение
    //в результирующий вектор будут добавлены элементы,
    //составленные из произведения элементов
    //исходного вектора и передаваемого 
    //(размер будет состоять из произведения мн-ва А и мн-ва B)
    Menge PryamoeProizvedenie(Menge& y)
    {
        Menge<T> res;       
        typename vector<T>::iterator it1, it2;
        for(it1=data.begin(); it1!=data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it1++)
            {
                res.data.push_back((*it1)*(*it2));
            }
        }
        return res;
    }
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    int a=5;
    int b=6;
    Menge<float> A(a);
    A.print();
    Menge<float> B(b);
    B.print();
    Menge<float> R1;
    /*cout << "Попытка вывести вектор: (пересечение)" << endl;
    R1=A.Peresechenie(B);
    R1.print();
    R1.~Menge();
    cout << "Попытка вывести вектор: (разность)" << endl;   
    R1=A.Raznost(B);
    R1.print();
    R1.~Menge();     */
    /*cout << "Попытка вывести вектор: (объединение)" << endl;
    R1=A.Obyedinenie(B);
    R1.print();
    R1.~Menge();  */
    cout << "Попытка вывести вектор: (ПП)" << endl;
    R1=A.PryamoeProizvedenie(B);
    R1.print();
    R1.~Menge();
    system("pause");
    return 0;
}
функция пересечение работает, с остальными косяк ^
0
alsav22
5441 / 4836 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.01.2014, 16:18 #4
По первому коду. Тут else зачем?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Menge Peresechenie(Menge& y)
{
    Menge<T> res1;
    vector<T>::iterator it1, it2, it3;
        
    for (it1=data.begin(); it1!=data.end(); it1++)
    {
        for (it2=y.data.begin(); it2!=y.data.end(); it2++)
        {
            if(*it1==*it2)
            {
                res1.data.push_back(*it1);
            }
            /*else
            {
                it2++;
            }*/
        }
    }
    return res1;
}
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Menge PryamoeProizvedenie(Menge& y)
    {
        Menge<T> res4;
        
        vector<T>::iterator it1, it2;
        for(it1=data.begin(); it1!=data.end(); it1++)
        {
            for(it2=y.data.begin(); it2!=y.data.end(); it2++) // не it1++
            {
                res4.data.push_back((*it1)*(*it2));
            }
        }
 
        return res4;
    }
Добавлено через 11 минут
Разность, наверное, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Menge Raznost(Menge& y)
{
    Menge<T> res2;
    vector<T>::iterator it1=data.begin(), it2;
 
    for(it1; it1!=data.end(); it1++)
    {
        for(it2=y.data.begin(); it2!=y.data.end(); it2++)
        {
            if (*it1 == *it2)
               break;
        }
        if (it2 == y.data.end())
            res2.data.push_back(*it1);
    }
    return res2;
}
1
alsav22
5441 / 4836 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.01.2014, 16:24 #5
Вроде бы правильно работает?
0
Миниатюры
Ошибка при запуске программы "vector iterator not incrementable"  
wolf1396
6 / 6 / 6
Регистрация: 07.05.2013
Сообщений: 219
14.01.2014, 15:31  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Вроде бы правильно работает?
спс большое, все ок

просто я не то сделал
0
Миниатюры
Ошибка при запуске программы "vector iterator not incrementable"  
MrGluck
Модератор
Эксперт CЭксперт С++
8078 / 4930 / 1431
Регистрация: 29.11.2010
Сообщений: 13,357
14.01.2014, 15:42 #7
Почему бы .data.push_back не вынести в метод add, например?

Добавлено через 1 минуту
и чем раньше вы поймете, что называть функции Raznost - это плохо, тем выгоднее для вас же. Ибо при работе с другими людьми, они заставят вас переучиться все равно.
0
14.01.2014, 15:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2014, 15:42

Ошибка list iterator not incrementable
код: std::list&lt;Platform * &gt; Platform::Platform_list; //статическое поле...

Ошибка "list iterator not decrementable" при удалении элемента из списка
При удалении элемента из списка (list) - ошибка list iterator not decrementable...

Ошибка в роботе с контейнером: set iterator not incrementable
Задание:Дано предложение.Какие большие и маленькие буквы с этих...


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

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

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