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

Выдаёт непонятную ошибку - C++

Восстановить пароль Регистрация
 
greendaizer
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 70
24.11.2013, 20:42     Выдаёт непонятную ошибку #1
Кратко: Нужно реализовать класс, представляющий собой функцию, заданную в табличной форме.
Зашли в тупик на методе Delete, который должен удалять точку по введённой абсциссе. Программа запускается, но потом прерывается на том месте, где должна удалить из вектора точку. Помогите разобраться, заранее спасибо.
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
#include <iostream>
#include <vector>
 
 
using namespace std;
 
 
struct point //Тип "точка"
{
 double x;
 double y;
};
 
point CreatingAPoint ()
{
 double fX;
 double fY;
 cin>>fX>>fY;
 point fPoint;
 fPoint.x=fX;
 fPoint.y=fY;
 return fPoint;
}
 
 
class TabulatedFunction //Класс "табл. ф-ия"
{
public:
 
 vector <point> Arr;
 
 
TabulatedFunction()
{
}
 
TabulatedFunction(vector <point> fArr) //????
{
 
 for (int i=0; i<fArr.size(); i++)
 {
  Arr.push_back(fArr[i]);
 }
 
}
 
void add (point fP)
{
 Arr.push_back(fP);
}
 
void Delete (double fx)
{
 for(vector<point>::iterator it = Arr.begin();it!=Arr.end();it++)
  if (fx==(*it).x) 
   Arr.erase(it);
}
 
}
;
 
int main()
{
 
 ///////////////////ТЕСТ1
 cout<<"TEST1"<<endl;
 cout<<"Enter quantity of points"<<endl;
 int testQ;                  
 cin>>testQ;
 
 vector <point> testArr;
 cout<<"Enter your points"<<endl;
 
 
 for (int i =0; i<testQ; i++)
 {
  
  testArr.push_back(CreatingAPoint());
 }
 
 TabulatedFunction A(testArr);
 cout<<endl;
 
 cout<<'x'<<" "<<'y'<<endl;
 for (int i=0; i<A.Arr.size(); i++)
 cout<<A.Arr[i].x<<" "<<A.Arr[i].y<<endl;
 
 cout<<endl<<endl;
 
  ///////////////ТЕСТ2
 cout<<"Enter a point you want to add"<<endl;
 A.add(CreatingAPoint());
 
  cout<<'x'<<" "<<'y'<<endl;
 for (int i=0; i<A.Arr.size(); i++)
 cout<<A.Arr[i].x<<" "<<A.Arr[i].y<<endl;
 
 cout<<endl<<endl;
 
 //////////////////ТЕСТ3
 double fA;
 cout<<"Enter abscissa of points you want to delete"<<endl;
 cin>>fA;
 A.Delete(fA);
 
 cout<<'x'<<" "<<'y'<<endl;
 for (int i=0; i<A.Arr.size(); i++)
 cout<<A.Arr[i].x<<" "<<A.Arr[i].y<<endl;
 
 cout<<endl<<endl;
 
 
 system("pause");
 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 21:08     Выдаёт непонятную ошибку #2
C++
1
2
3
4
5
6
7
8
9
void Delete (double fx)
{
  for(vector<point>::iterator it = Arr.begin(); it != Arr.end(); it++)
  if (fx == (*it).x)
  {
    it = Arr.erase(it);
    --it;
  }
}
greendaizer
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 70
24.11.2013, 21:13  [ТС]     Выдаёт непонятную ошибку #3
alsav22, ошибка выскакивает на том же месте, но уже другая
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 21:14     Выдаёт непонятную ошибку #4
Какая другая? У меня нормально работает. Что вводите? Скрин до ошибки покажите.
Миниатюры
Выдаёт непонятную ошибку  
greendaizer
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 70
24.11.2013, 21:23  [ТС]     Выдаёт непонятную ошибку #5
Спасибо, разобрались с этой проблемой: вводили несколько одинаковых иксов.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 22:07     Выдаёт непонятную ошибку #6
Цитата Сообщение от greendaizer Посмотреть сообщение
Спасибо, разобрались с этой проблемой: вводили несколько одинаковых иксов.
Значит мой вариант кривой. Нужно чтобы и при нескольких одинаковых значения корректно работало.

Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Delete (double fx)
{
  for(int i = 0; i < Arr.size(); )
  {
      if (fx == Arr[i].x)
      {
        Arr.erase(Arr.begin() + i);
        continue;
      }
      ++i;
  }
}
greendaizer
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 70
24.11.2013, 22:44  [ТС]     Выдаёт непонятную ошибку #7
Спасибо :3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 23:04     Выдаёт непонятную ошибку
Еще ссылки по теме:

C++ Dev C++ выдает непонятную ошибку
C++ Выдаёт ошибку
Выдаёт ошибку C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 23:04     Выдаёт непонятную ошибку #8
Вот вариант с итераторами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Delete (double fx)
{
  for(vector<point>::iterator it = Arr.begin(); it != Arr.end();)
  {
      if (fx == (*it).x)
      {
        it = Arr.erase(it);
        continue;
      }
      ++it;
  }
}
Yandex
Объявления
24.11.2013, 23:04     Выдаёт непонятную ошибку
Ответ Создать тему
Опции темы

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