0

我需要找到 10000 个点的数据集的所有对距离。我正在使用向量在 C++ 中编码来存储点。这是我的向量:

vector <vector <double> > data.
vector <vector <double> > dist.

我正在从文件中读取输入数据并存储在数据中。然后我计算所有对距离并将其存储在 dist.

它适用于高达 8000 点的小型数据集。但是当我为更大的数据集运行相同的代码时,我收到以下错误:

在抛出 'std::bad_alloc' 的实例后调用终止

什么():std::bad_alloc

中止(核心转储)。

我已经上网,但找不到解决方案。请帮我解决这个问题。

4

1 回答 1

0

您使用了太多内存,并且该向量似乎无法分配此内存。

如上所述,如果仅考虑双精度值,则每个向量大约有 512 MB 内存( std::vector 类也有一些内部变量和 vfptable ,您分配了 8000 次)。

std:vector 的习惯是每次超过它的预分配限制时都会增加它的大小,以防止在每个添加的新元素上重新分配昂贵的元素。

所以向量的真实大小总是大于它内部元素的数量。

尝试为如此大的数字管理自己的记忆,特别是如果您从一开始就知道元素的数量。

当您不知道要添加多少元素时,std:vector 非常有用,而且对于 6400 万个元素的大小肯定不是 :)。

于 2014-03-21T09:06:49.743 回答