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

Why program stops iterating before execution is complete in c++?

本文关键字:迭代 c++ 程序 执行 为什么      更新时间:2023-10-16

我不知道为什么我的程序在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字节以及映射中的左、右和父节点的几个指针组成。每个节点至少44字节,每个25M节点都有额外的内存分配开销。

本行

Coordinate coordinate1 = *iterator1;

你正在复制迭代器指向的

你可能是指

Coordinate& coordinate1 = *iterator1;

同样适用于内循环。你最终会得到很多副本。

终于解决了这个问题。在发布模式下运行我的代码,它工作得很好