C++ 关于为向量<Point> myVariable 赋值

C++ Regarding assigning value to Vector<Point> myVariable

本文关键字:Point gt myVariable 赋值 lt 向量 C++      更新时间:2023-10-16

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]是没有意义的。

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

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

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

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