0

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;
}

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

谢谢指导!

4

3 回答 3

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);调用构造函数将新元素附加到向量,用作构造函数的参数。这是将新创建的元素附加到向量的最有效方式。Point1,1

于 2012-10-29T04:34:36.100 回答
0

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

此行之后:vector myPoints;

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

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

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

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

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

于 2012-10-29T04:36:16.707 回答
0

您没有初始化任何对象。您需要制作对象,然后将它们放入向量中,否则您正在对不存在的东西进行操作,这会导致段错误。

例子:

Point myPoint;
myPoints.push_back(myPoint);
myPoints[0].x = 1;
于 2012-10-29T04:40:06.540 回答