调整矢量数组

时间:2016-07-01 06:17:49

标签: c++

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>的大小?我试图动态分配大小。但它给出了错误。

1 个答案:

答案 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]时出错的原因。