从静态数组更改为向量

时间:2014-03-14 00:34:19

标签: c++ arrays vector

这是我的代码:

vector<int> Edge[1000000]; //size of array must be very high

scanf("%d%d",&N,&M );
//N = size of workable index numbers for Edge
for( i=1;i<=M;i++){

    scanf("%d%d",&u,&v );
    Edge[u].push_back( v );
}

但是正如你所看到的,它是一个静态的向量数组。 如果我把它更改为:

vector<vector<int>> Edge;

我如何为循环和后推做到这一点?我需要创建一个N + 1大小的向量,每个位置也是一个向量。

2 个答案:

答案 0 :(得分:0)

  

我需要创建一个N + 1大小的矢量,每个位置也是一个矢量。

考虑到您在编译时知道外部容器的大小,您还可以使用std::array来存储向量:

std::array<std::vector<int>, N + 1> Edge;

如果您在编译时不知道大小,可以使用:

std::vector<std::vector<int>> Edge;

但作为一般经验法则,往往避免使用矢量矢量,因为它们通常不能很好地工作。

答案 1 :(得分:0)

您可以通过将int传递给构造函数来构造给定大小的向量。然后,您可以使用循环初始化子向量。

int size;
vector<vector<int>> Edge(size); //Initializes Outer Array to have 'size' elements

for(auto i:Edge)
{
    // i is a vector within Edge
}

优点是你不必退缩。如果你仍然想按顺序push_back(不必跟踪迭代器/ int),你可以使用vector.reserve()代替。