将对象推入向量的问题

Posted

技术标签:

【中文标题】将对象推入向量的问题【英文标题】:Issue pushing objects into a vector 【发布时间】:2014-05-01 17:19:59 【问题描述】:

我正在尝试编写一段代码,该代码获取一个对象并将其推送到向量的背面,但对象没有被正确推送。

我正在编写一个 OpenGL 应用程序,我想在其中画很多线。为了存储这些行,我首先在C2DPointSet 中创建每一行,当我停止绘制时,我想将当前行推入我的行向量中。通过调试代码,我看到推线后向量的长度为0,向量中的同一行有0个点(应该不是这样)。代码如下:

vector <C2DPointSet> lines; //global variables
C2DPointSet line;

//function that runs if a button is pressed and i click in my glwindow
void lineButtonFunction(int x,int y)
    C2DPoint currentPoint;  
    currentPoint=workspacePoint(x,y);//returns point;s cordinates acording to cursorx,y-it works
    line.AddCopy(currentPoint);//adds a copy of the given point to obj line



//code that runs when i am done drawing 
if(buttons[i].getButtonText()=='L') 
    lines.push_back(line);
    line.DeleteAll();//empties the obj

我不知道问题是什么。使用不同的对象,代码将运行。我不确定,但我认为问题源于推送C2DPointSet,因为它存储了我喜欢的点数。另外,我观察到,无论我在行中存储多少点,我的大小都是 12。

C2DPointsC2DPointSet 来自 geolib;信息可以在here找到。

【问题讨论】:

【参考方案1】:

C2DPointSet 似乎有构造函数和析构函数,但没有复制构造函数和复制赋值运算符,即 C2DPointSet 不遵循the rule of three。如果 C2DPointSet 有指针成员,这是有问题的。可以?然后它天生就坏了。它只是不适用于向量。

【讨论】:

【参考方案2】:

可能取决于 C2DPointSet 类的内容。可能你那里没有复制构造函数。我的建议是有一个引用向量而不是实际对象的向量。这样,您还将最大限度地减少开销。所以你应该有 vector 线,而不是你所拥有的。尝试一下。它可能会起作用。

【讨论】:

@FredOverflow 你可能是对的。然后只是一个指针向量(例如 std::vector 行。

以上是关于将对象推入向量的问题的主要内容,如果未能解决你的问题,请参考以下文章

将 1D 向量作为行推入 2D 向量数组

为啥我不能将整数向量推入 C++ 中的二维整数向量?

将结构向量推入结构?

如何将字符串的字符推入二维向量[关闭]

在展开期间将向量成员推入向量:vector.push_back(vector[0])

如何将字符串(逐个字符)推入字符串向量