我需要找到10000点数据集的所有对距离。我用C ++编写代码来存储点。这是我的载体:
vector <vector <double> > data.
vector <vector <double> > dist.
我正在从文件中读取输入数据并存储在数据中。然后我计算所有对距离并将其存储在dist。
适用于小型数据集,最高可达8000点。但是当我为更大的数据集运行相同的代码时,我收到以下错误:
在抛出'std :: bad_alloc'
的实例后终止调用what():std :: bad_alloc
中止(核心倾销)。
我上网了,但找不到解决办法。请帮我解决这个问题。
答案 0 :(得分:0)
您使用的内存过多,而且矢量无法分配此内存。
如上所述,如果只考虑双精度数,那么每个矢量的内存大约为512 MB(std :: vector类也有一些内部变量和vfptable,你可以分配8000次)。
std:vector每次超过它的预分配限制时都会增加它的大小,以防止每个新元素的重新分配都很昂贵。
因此,向量的真实大小将始终大于其内部元素的数量。
尝试为这么大的数字管理你自己的记忆,特别是如果你从一开始就知道元素的数量。
std:当你不知道要添加多少元素时,vector非常有用,而且肯定不是6400万元素的大小:)。