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

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

Войти
Регистрация
Восстановить пароль
 
wolf1396
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 208
#1

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

13.01.2014, 14:10. Просмотров 697. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2014, 14:10     Ошибка при запуске программы "vector iterator not incrementable"
Посмотрите здесь:

Vector iterator not incrementable - C++
Здравствуйте. Подскажите, из-за чего не работает код? При запуске программы появляется ошибка: &quot;... expression: vector iterator not...

Синхронизация map и vector. Iterator not incrementable - C++
День добрый. Надо синхронизровать vector и map, чтобы в них были только одинаковые элементы. Вот мой код, который выбрасывает ошибку....

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

Ошибка "iterator not dereferencable" при использовании ссылки - C++
Всем привет. Без ссылки все работает, с ссылкой ошибка: &quot;iterator not dereferencable&quot;. С ссылкой: void func(vector&lt;string&gt;&amp; arr) ...

Ошибка list iterator not incrementable - C++
код: std::list&lt;Platform * &gt; Platform::Platform_list; //статическое поле класса Platform перебираем элементы и удаляем их при...

Ошибка в роботе с контейнером: set iterator not incrementable - C++
Задание:Дано предложение.Какие большие и маленькие буквы с этих 'k','p','s','t','f','h','c' не содержатся в предложении. Обязательным...

Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана - C++
Проблема с функцией BuildTable. Компилируется, но в процессе работы возникает ошибка. // Huffmann.cpp: определяет точку входа для...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 208
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
5416 / 4812 / 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.01.2014, 16:24     Ошибка при запуске программы "vector iterator not incrementable" #5
Вроде бы правильно работает?
Миниатюры
Ошибка при запуске программы "vector iterator not incrementable"  
wolf1396
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 208
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"
Еще ссылки по теме:

Ошибка: "Точка входа в процедуру gxx_personality_sj0 не найдена" при запуске приложения - C++
имеется код: #include &lt;SFML/Graphics.hpp&gt; int main() { sf::RenderWindow window(sf::VideoMode(200, 200), &quot;test&quot;); ...

Ошибка при запуске "Example.exe не является внутренней или внешней командой" - C++
когда запускаю консольное приложение win32 появляется командная строка, и там пишет: &quot;&quot;C:\Users\Denis\documents\visual studio...

Ошибка "Stack around the variable 'a' was corrupted" при завершении программы - C++
Учусь создавать списки. Идея такова чтобы создать список в отдельном cpp, а пользователь имел доступ только к функциям добавления, удаления...

Ошибка при выполнении программы "division by zero" - C++
Прошу, обьясните мне, почему когда я уже запускаю прогу и ввожу числа вилетает ошибка:

namespace "std" has no member "vector" - C++
Собственно такая проблема, мне нужно использовать в программе std::vector, однако VC ругается, мол нет ни каких векторов в std. Люди...


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
7171 / 4337 / 633
Регистрация: 29.11.2010
Сообщений: 11,784
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"
Ответ Создать тему
Опции темы

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