Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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_Dynamic_Disjoint Sets - Fatal编程技术网

C++ 什么时候有太多的动态数组是危险的?

C++ 什么时候有太多的动态数组是危险的?,c++,arrays,dynamic,disjoint-sets,C++,Arrays,Dynamic,Disjoint Sets,我目前正在为一项关于城市和桥梁的任务编写代码。我必须在其受尊重的地区打印城市和桥梁,例如: //unorganized inputs from user given the # of "paths" we need 4 // the # of paths 1 2 5 // 1 = city , 2 = city, 5 = bridge length 6 7 5 // 6 = city , 7 = city, 5 = bridge length 2 3 7 // 2 = city

我目前正在为一项关于城市和桥梁的任务编写代码。我必须在其受尊重的地区打印城市和桥梁,例如:

//unorganized inputs from user given the # of "paths" we need
4       // the # of paths
1 2 5  // 1 = city , 2 = city, 5 = bridge length
6 7 5  // 6 = city , 7 = city, 5 = bridge length
2 3 7  // 2 = city , 3 = city, 7 = bridge length
6 9 7  // 6 = city , 9 = city, 7 = bridge length
运行完程序后,它将被分类为:

first district
1 2 5
2 3 7

2nd district
6 7 5
6 9 7

现在,我将通过cin读取这些输入。我想将所有可能的路径(如1、2、5)存储到一个数组中,然后通过程序对它们进行排序和组织。问题是我可能有超过500000条来自用户的路径。我想创建500k动态阵列。这会导致严重的内存问题吗

我已经研究了其他可能的解决方法,比如kruskal算法和不相交集(我认为是最有用的)。我很难理解不相交集的编码,我想我尝试一种我更熟悉的方法

在存储值、比较和组织它们的位置上提供任何帮助都将非常有用。链接到我阅读有关这方面信息的地方会有所帮助。过去几天我读了很多书。没有多大帮助

总而言之,我的问题是:

  • 500k动态阵列会导致内存方面的严重问题吗
  • 在给定路径的情况下,在何处存储值并比较和组织它们
500k动态阵列会导致内存方面的严重问题吗

这没问题,假设每个都只是一个3整数的数组。通常,您会避免将其作为单独的分配来执行,因为这样做会过多——这会有点慢,而且所需的簿记也会消耗相当多的内存。有一种更好的方法:

在给定路径的情况下,在何处存储值并比较和组织它们


我从一个包含这3个字段的结构/类开始,然后使用其中的
std::vector
。这将把所有值存储为一个连续的分配。比较而言,创建、搜索和分配的速度非常快。

一般来说,假设您的应用程序有2 Gig的内存,12字节的500K记录(假设您使用32位作为值)不会有问题。
例如,如果希望减小数据集大小,可以使用以下数据格式:



查看城市集的大小(城市数量),以及两个城市之间的最大长度
此外,像索引城市对(A-B成为对ID)这样的事情也可以减少数据集

这可能与你的问题没有直接关系,但我认为你想要实现的是-。如果将图形建模为邻接矩阵,则不需要分配500k个动态数组。考虑以下格式来存储数据:

int city_map [MAX_NO_OF_CITIES][MAX_NO_OF_CITIES];

city_map[i][j] = length_of_brigde_connecting_city_i_to_j;

这样存储500000条条目只需要略多于1MB的内存。

“问题是我可能有超过500000条来自用户的路径。”,你的意思是希望用户通过控制台输入500k路径吗?这可能是通过一个文件。@Singeroffall:很可能导师会使用类似于
cat problem\u instance1 | user\u writed\u program
@Zeta的东西,我希望是这样,但我想我最好问清楚;)当你有
std::vector
时,为什么要使用动态数组?哎呀,忘了提一下,我不允许在STL中使用任何东西。一切都必须由我自己编码。@Chris然后你可以使用这些500k记录的数组(或者不管你需要多少)来完成相当于
vector
。只是避免在堆栈上分配它。
int city_map [MAX_NO_OF_CITIES][MAX_NO_OF_CITIES];

city_map[i][j] = length_of_brigde_connecting_city_i_to_j;