如何从 main 中的结构创建向量?

  • 本文关键字:结构 创建 向量 main c++
  • 更新时间 :
  • 英文 :


我在这里做错了什么?我正在尝试从 main 中的结构制作一个向量,但它一直显示错误。

#include <iostream>
#include <vector>
using namespace std;
struct A{
int y;
};
int main()
{
int x;
cin >> x;
vector<A> vertex;
for(int i = 0; i < x; i++){
vertex.push_back(x)
cout << vertex[i]<<endl;
}
return 0;
}

x 是 int 而不是 A

你需要

int main()
{
int x;
cin >> x;
vector<A> vertex;
for (int i = 0; i < x; i++) {
A a;
a.y = x;
vertex.push_back(a);
cout << vertex[i].y << endl;
}
}

您可以通过提供从 int 到 A 的隐式转换来使原始代码正常工作

您还需要为 A 提供一个<<运算符

您正在尝试将intpush_back()到包含A对象的vector中。 您尚未定义从intA的任何转换,因此出现错误。

您可以将构造函数添加到A,该构造函数接收int并将其分配给y

struct A{
int y;
A(int value) : y(value) {}
};

或者,您可以省略构造函数,而是创建一个A对象并将其传递给push_back()

A a;
a.y = x;
vertex.push_back(a);

或者,使用聚合初始化:

vertex.push_back(A{x});

或者,您也可以改用emplace_back(),这将使用指定的构造参数为您构造vector内的A对象:

vertex.emplace_back(x);

无论哪种方式,这都将修复您看到的错误。

然后,您会遇到一个新错误,因为您尚未定义用于打印A对象的operator<<,因此您还必须添加该错误:

struct A{
int y;
...
};
std::ostream& operator<<(std::ostream &os, const A &a) {
return os << a.y;
}

现在,您的代码将运行。

最新更新