class graph
{
vector<int > a[];
int nodes,edges;
public:
graph(int n,int m)
{
nodes=n;edges=m;
a = new vector<int> [n];
}
};
这是我的代码中的一个片段。如何调整array
vector<int>
的大小?我试图动态分配大小。但它给出了错误。
答案 0 :(得分:2)
使用std::vector<std::vector<...>>
代替&#34; raw&#34;数组std::vector<...>
,然后使用.resize()
:
std::vector<std::vector<int>> a;
a.resize(n);
这将使您不必编写大量样板代码(自定义析构函数,复制构造函数,...),并且比实际代码更不容易出错。
代码中的实际问题是vector<int> a[]
在此上下文中不应该有效:它声明了&#34; derived-declarator-type-list数组的变量a
int“的未知界限,&#34;一个不完整的对象类型&#34; ,你不能声明不完整类型的对象。在gcc上,如果添加-pedantic
,您将收到警告:
警告:ISO C ++禁止零大小的阵列&#39; a&#39; [-Wpedantic]
但如果没有-pedantic
,则会声明std::vector<int> a[0]
,但无法为其分配std::vector<int> *
,这就是分配new std::vector<int> [n]
时出错的原因。