我不知道为什么我的程序在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;
}
答案 0 :(得分:2)
你内存不足。列表中有5000个条目。您有一个地图到这些条目的地图,5000 * 5000地图条目,或25M。每个映射条目包含键的24个字节(坐标),值的8个字节(双精度),以及地图中左,右和父节点的几个指针。每个节点至少有44个字节,每个25M节点都有额外的内存分配开销。
答案 1 :(得分:0)
在这一行
Coordinate coordinate1 = *iterator1;
您正在复制迭代器指向的内容
你可能意味着
Coordinate& coordinate1 = *iterator1;
同样适用于你的内循环。你最终得到了很多副本。
答案 2 :(得分:0)
我终于解决了这个问题。我的代码处于发布模式并且运行良好