Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从静态数组更改为向量_C++_Arrays_Vector - Fatal编程技术网

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
}