C ++关于为Vector <point> myVariable </point>赋值

时间:2012-10-29 04:31:12

标签: c++

C ++关于为Vector myVariable

赋值

大家好。

我有这个结构

struct Point
{
int x,y;
}

在我的main.cpp中我得到了类似的东西

int main()
{
vector<Point> myPoints;

myPoints[0].x = 1;
myPoints[0].y = 1;

myPoints[1].x = 2;
myPoints[1].x = 2;

return 0;
}

我得到了分段核心转储,将值设置为向量元素有什么问题。

感谢您的指导!

3 个答案:

答案 0 :(得分:5)

vector<Point> myPoints;

创建Point个对象的空向量。由于它是空的,因此您无法访问myPoint[0]myPoint[1]等。尝试执行此操作不会自动创建元素;相反,它会调用未定义的行为 - 通常是一个分段错误。

使用push_back将元素附加到向量:

myPoints.push_back(Point(1,1));

或者,可以调整向量的大小,使其包含默认构造的元素:

myPoints.resize(2);

你也可以使用std::vector的构造函数的参数在初始化时调整它的大小:

vector<Point> myPoints(2);  // auto-resizes the vector to length 2

关于push_back的注意事项。在C ++ 11中,您也可以使用emplace_back()代替push_back()myPoints.emplace_back(1,1);添加新的通过使用Point作为构造函数的参数,就地调用1,1构造函数将元素添加到向量中。这是将新创建的元素附加到向量的最有效方法。

答案 1 :(得分:0)

问题是您正在尝试访问尚未创建的元素。

这一行之后:     矢量myPoints;

你有一个向量myPoints,其中包含0个元素。因此,myPoints[0]毫无意义。

您需要执行以下操作之一:

  1. 创建一个具有预定尺寸的矢量:vector<Point> myPoints(2);(注意:您可以稍后展开或缩小它),然后执行myPoints[0].x=1等。

  2. 使用向量的push_back方法向向量添加新元素,即myPoints.push_back(Point(0, 0));

  3. 声明新的矢量对象后,使用resize方法为两个新元素分配空间。

答案 2 :(得分:0)

您没有初始化任何对象。你需要制作对象并将它们放入向量中,否则你就会对不存在的东西起作用。导致段错误。

实施例

Point myPoint;
myPoints.push_back(myPoint);
myPoints[0].x = 1;