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

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

Войти
Регистрация
Восстановить пароль
 
wolf1396
5 / 5 / 0
Регистрация: 07.05.2013
Сообщений: 192
13.01.2014, 14:10     Ошибка при запуске программы "vector iterator not incrementable" #1
при запуске программы (без разницы какой функции) вылетает ошибка (заг. темы)
как это исправить?
мне кажется, что проблема в том, что я создаю класс (внутри функции) с неизвестным размером.
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2014, 14:10     Ошибка при запуске программы "vector iterator not incrementable"
Посмотрите здесь:

vector(выскакивает ошибка "vector iterators incompatible") C++
Ошибка в роботе с контейнером: set iterator not incrementable C++
Ошибка при запуске "Example.exe не является внутренней или внешней командой" C++
Ошибка при выполнении программы "division by zero" C++
C++ Ошибка "Stack around the variable 'a' was corrupted" при завершении программы
Vector iterator not incrementable C++
C++ Ошибка list iterator not incrementable
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,113
13.01.2014, 14:29     Ошибка при запуске программы "vector iterator not incrementable" #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;
wolf1396
5 / 5 / 0
Регистрация: 07.05.2013
Сообщений: 192
13.01.2014, 15:47  [ТС]     Ошибка при запуске программы "vector iterator not incrementable" #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;
}
функция пересечение работает, с остальными косяк ^
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.01.2014, 16:18     Ошибка при запуске программы "vector iterator not incrementable" #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;
}
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.01.2014, 16:24     Ошибка при запуске программы "vector iterator not incrementable" #5
Вроде бы правильно работает?
Миниатюры
Ошибка при запуске программы "vector iterator not incrementable"  
wolf1396
5 / 5 / 0
Регистрация: 07.05.2013
Сообщений: 192
14.01.2014, 15:31  [ТС]     Ошибка при запуске программы "vector iterator not incrementable" #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Вроде бы правильно работает?
спс большое, все ок

просто я не то сделал
Миниатюры
Ошибка при запуске программы "vector iterator not incrementable"  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2014, 15:42     Ошибка при запуске программы "vector iterator not incrementable"
Еще ссылки по теме:

C++ Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана
C++ Исправить ошибку "Vector iterator not dereferancable"
C++ Ошибка: "Точка входа в процедуру gxx_personality_sj0 не найдена" при запуске приложения
C++ Синхронизация map и vector. Iterator not incrementable
C++ Ошибка "iterator not dereferencable" при использовании ссылки

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5667 / 3146 / 357
Регистрация: 29.11.2010
Сообщений: 8,420
14.01.2014, 15:42     Ошибка при запуске программы "vector iterator not incrementable" #7
Почему бы .data.push_back не вынести в метод add, например?

Добавлено через 1 минуту
и чем раньше вы поймете, что называть функции Raznost - это плохо, тем выгоднее для вас же. Ибо при работе с другими людьми, они заставят вас переучиться все равно.
Yandex
Объявления
14.01.2014, 15:42     Ошибка при запуске программы "vector iterator not incrementable"
Ответ Создать тему
Опции темы

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