gpt4 book ai didi

c++ - 为什么程序在 C++ 中执行完成之前停止迭代?

转载 作者:行者123 更新时间:2023-11-28 02:19:43 25 4
gpt4 key购买 nike

我不知道为什么我的程序在 4298 次迭代时停止迭代。当列表包含 100 个项目或类似的东西时,程序将执行它应该执行的操作。

this->getList() 包含 5000 个项目。我正在对我的程序进行压力测试

这是导致问题的函数:

map<Coordinate, map<Coordinate, double>> NearestPoints::allDistances() {

map<Coordinate, map<Coordinate, double>> result = map<Coordinate, map<Coordinate, double>>();

int count = 0;

list<Coordinate> list1 = this->getList();

for (list<Coordinate>::iterator iterator1 = list1.begin(), end = list1.end(); iterator1 != end; iterator1++)
{

cout << ++count << endl;

Coordinate coordinate1 = *iterator1;

result.insert(make_pair(coordinate1,map<Coordinate,double>()));

list<Coordinate> list2 = this->getList();

list2.remove(coordinate1);

for (list<Coordinate>::iterator iterator2 = list2.begin(), internalEnd = list2.end(); iterator2 != internalEnd; iterator2++)
{
Coordinate coordinate2 = *iterator2;

/*
if (result.find(coordinate2) != result.end())
{
result.at(coordinate1).insert(make_pair(coordinate2, result.at(coordinate2).at(coordinate1)));

}
*/

//else
//{
result.at(coordinate1).insert(make_pair(coordinate2, this->distanceBetweenTwoPoints(coordinate1.getX(),coordinate1.getY(),coordinate2.getX(),coordinate2.getY())));
//}
}
}
return result;

最佳答案

您的内存不足。列表中有 5000 个条目。您有一个映射到这些条目的映射,对于 5000 * 5000 个映射条目,或 25M。每个映射条目由 24 个字节的键(坐标)、8 个字节的值( double )以及映射中左、右和父节点的几个指针组成。每个节点至少有 44 个字节,25M 个节点中的每个节点都有额外的内存分配开销。

关于c++ - 为什么程序在 C++ 中执行完成之前停止迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32940519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com