C++ 从静态数组更改为向量
这是我的密码:C++ 从静态数组更改为向量,c++,arrays,vector,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 ); } 矢量边[10000
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 );
}
矢量边[1000000]//数组的大小必须非常大
scanf(“%d%d”,&N,&M);
//N=边缘可用索引号的大小
对于(i=1;i
我需要创建一个N+1大小的向量,每个位置也是一个向量
考虑到您在编译时知道外部容器的大小,还可以使用存储向量:
std::array<std::vector<int>, N + 1> Edge;
std::数组边缘;
如果在编译时不知道大小,可以使用:
std::vector<std::vector<int>> Edge;
std::向量边;
但根据一般经验,倾向于避免使用向量的向量,因为它们通常不会很好地工作。您可以通过将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
}
int大小;
向量边(大小);//初始化外部数组以具有“size”元素
用于(自动i:边缘)
{
//i是边内的向量
}
优点是你不必推回。如果你仍然想按顺序推回(不必跟踪迭代器/int),你可以使用vector.reserve()。vector Edge(100000);
或vector Edge;Edge.resize(100000)
我需要在解算后初始化,因为它是一个全局变量。即使变量是全局变量,它仍然有效。你的意思是你在声明变量时还不知道变量的大小吗?正是这样,thanksI同意,直到这一点:“倾向于避免向量的向量,因为它们通常不会很好地工作。”“保罗·德雷珀,最好也说出原因。
int size;
vector<vector<int>> Edge(size); //Initializes Outer Array to have 'size' elements
for(auto i:Edge)
{
// i is a vector within Edge
}