这是我的代码:
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大小的向量,每个位置也是一个向量。
答案 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()代替。