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;
}
我得到了分段核心转储,将值设置为向量元素有什么问题。
感谢您的指导!
答案 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]
毫无意义。
您需要执行以下操作之一:
创建一个具有预定尺寸的矢量:vector<Point> myPoints(2);
(注意:您可以稍后展开或缩小它),然后执行myPoints[0].x=1
等。
使用向量的push_back
方法向向量添加新元素,即myPoints.push_back(Point(0, 0));
声明新的矢量对象后,使用resize
方法为两个新元素分配空间。
答案 2 :(得分:0)
您没有初始化任何对象。你需要制作对象并将它们放入向量中,否则你就会对不存在的东西起作用。导致段错误。
实施例
Point myPoint;
myPoints.push_back(myPoint);
myPoints[0].x = 1;