есть
C++ (Qt)
///////////////класс координаты (точки)
struct tabl
{
tabl& tabl::operator = (const tabl &Other)
{
// Присваивание - не константный результат!!!!!
this->x_tabl = Other.x_tabl;
this->y_tabl = Other.y_tabl;
this->x_widget = Other.x_widget;
this->y_widget = Other.y_widget;
return *this;
}
inline bool tabl::operator == (const tabl &Other) const
{
// Равенство, константный метод
return ((this->x_tabl == Other.x_tabl) && (this->y_tabl == Other.y_tabl )&& (this->x_widget==Other.x_widget) && (this->y_widget==Other.y_widget));
}
inline bool tabl::operator < (const tabl &Other) const
{
if(this->x_tabl == Other.x_tabl)
return (this->y_tabl <Other.y_tabl);
return (this->x_tabl < Other.x_tabl);
}
double x_tabl;
double y_tabl;
double x_widget;
double y_widget;
tabl(){x_tabl=0; y_tabl=0; x_widget=0; y_widget=0;}
tabl(double x_tabl_,double y_tabl_,double x_widget_=0,double y_widget_=0)
{
x_tabl = x_tabl_;
y_tabl = y_tabl_;
x_widget =x_widget_;
y_widget = y_widget_;
}
};
//////////////////////////////////////////класс одной кривой
class Data
{
public:
QVector<tabl>table;
double maxX_graph_one;
double minX_graph_one;
double minY_graph_one;
double maxY_graph_one;
int count_point_in_tabl;
Data()
{
}
Data(QVector<tabl> table_)
{
table=table_;
defaultSettings();
}
void set_vector_table(QVector<tabl> table_)
{
table = table_;
defaultTable();
}
void defaultTable()
{
maxY_graph_one=table[0].y_tabl;
minY_graph_one=table[0].y_tabl;
minX_graph_one = std::min_element(table.begin(),table.end())->x_tabl;
maxX_graph_one = std::max_element(table.begin(),table.end())->x_tabl;
for(int i=0;i<count_point_in_tabl;i++)
{
if(maxY_graph_one <=(table[i].y_tabl)) maxY_graph_one=(table[i].y_tabl);
if(minY_graph_one >= (table.at(i).y_tabl)) minY_graph_one = (table.at(i).y_tabl);
}
}
};
//////////////класс координатной плоскости, где накладываются кривые
class SettingsGraph
{
public:
double stepX;
double stepY;
double minX_graph_all;
double minY_graph_all;
double maxX_graph_all;
double maxY_graph_all;
QVector<Data> curves;
public:
SettingsGraph()
{
}
SettingsGraph(QVector<Data> curves_)
{
if(curves_!=curves)
curves = curves_;
}
void add_curves_one(Data graph_)
{
curves.push_back(graph_);
calculate_Min_Max();
}
void delete_curves_one(double number_)
{
curves.remove(number_);
calculate_Min_Max();
}
void calculate_Min_Max()
{
int countGraph=curves.size();
minX_graph_all=0;
maxX_graph_all=0;
minY_graph_all=0;
maxY_graph_all=0;
for(int i=0;i<countGraph;i++)
{
if(maxY_graph_all<=(curves[i].maxY_graph_one)&&curves[i].visible_graph_one) maxY_graph_all=(curves[i].maxY_graph_one);
if(minY_graph_all>=(curves[i].minY_graph_one)&&curves[i].visible_graph_one) minY_graph_all=(curves[i].minY_graph_one);
if(maxX_graph_all<=(curves[i].maxX_graph_one)&&curves[i].visible_graph_one) maxX_graph_all=(curves[i].maxX_graph_one);
if(minX_graph_all>=(curves[i].minX_graph_one)&&curves[i].visible_graph_one) minX_graph_all=(curves[i].minX_graph_one);
}
if(minX_graph_all == maxX_graph_all&& minY_graph_all == maxY_graph_all)
{
defaultAces();
return ;
}
}
//////////////////////////////////////////////////////////////////////////////
Вопрос
при вызове add добавляются кривая, graph-объект класса SettingsGraph
C++ (Qt)
void Plotter::add(double x,double y)
{
Data data_;
QVector<tabl> tabl_;
tabl_.push_back(tabl(x,y));
data_.set_vector_table(tabl_);
graph.add_curves_one(data_);
}
Проблема- при удалении крывой из вектора curves класса SettingsGraph происходит прикол
например, есть 2 точки (-1000,2) (3,100)
вызову 2 раза подряд add(-1000,2) add(3,100)
в итоге в curves будет 2 элемента
- curves [2]
-
+ table [1]({x_tabl=-1000.0000000000000 y_tabl=2.0000000000000000 x_widget=0.00000000000000000 ...}) QVector<tabl>
maxX_graph_one -1000.0000000000000 double
minX_graph_one -1000.0000000000000 double
minY_graph_one 2.0000000000000000 double
maxY_graph_one 2.0000000000000000 double
- [1]
+ table [1]({x_tabl=3.0000000000000000 y_tabl=100.00000000000000 x_widget=0.00000000000000000 ...}) QVector<tabl>
maxX_graph_one 3.0000000000000000 double
minX_graph_one 3.0000000000000000 double
minY_graph_one 100.00000000000000 double
maxY_graph_one 100.00000000000000 double
////////////////////////////////////////////
вызвав функцию graph.delete_curves_one(0);
получаю
- curves [1]
-
+ table [1]({x_tabl=3.0000000000000000 y_tabl=100.00000000000000 x_widget=0.00000000000000000 ...}) QVector<tabl>
maxX_graph_one -1000.0000000000000 double
minX_graph_one -1000.0000000000000 double
minY_graph_one 2.0000000000000000 double
maxY_graph_one 2.0000000000000000 double
Как решить прикол с вектором curves - удаление элементов происходит неправильно??