C++ 关于给 Vector myVariable 赋值
大家好。
我有这个结构
struct Point
{
int x,y;
}
在我的主要情况下.cpp我得到了这样的东西
int main()
{
vector<Point> myPoints;
myPoints[0].x = 1;
myPoints[0].y = 1;
myPoints[1].x = 2;
myPoints[1].x = 2;
return 0;
}
我得到了分段核心转储,为向量元素设置值有什么问题。
感谢您的指导!
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
作为构造函数的参数。这是将新创建的元素附加到矢量的最有效方法。
您没有初始化任何对象。您需要创建对象,然后将它们放入向量中,否则您将作用于不存在的东西,从而导致段错误。
例:
Point myPoint;
myPoints.push_back(myPoint);
myPoints[0].x = 1;
问题是您正在尝试访问尚未创建的元素。
在此行之后: 矢量我的积分;
你有一个向量myPoints
它正好有0
个元素。因此,myPoints[0]
是没有意义的。
您需要执行以下操作之一:
-
创建一个具有预定大小的向量:
vector<Point> myPoints(2);
(注意:您可以稍后扩展或缩小它),然后执行myPoints[0].x=1
等。 -
使用向量的
push_back
方法向向向量添加新元素,即myPoints.push_back(Point(0, 0));
-
声明新的矢量对象后,使用
resize
方法为两个新元素分配空间。