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

时间:2015-10-05 02:36:41

标签: c++ visual-studio-2015

我不知道为什么我的程序在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;

}

3 个答案:

答案 0 :(得分:2)

你内存不足。列表中有5000个条目。您有一个地图到这些条目的地图,5000 * 5000地图条目,或25M。每个映射条目包含键的24个字节(坐标),值的8个字节(双精度),以及地图中左,右和父节点的几个指针。每个节点至少有44个字节,每个25M节点都有额外的内存分配开销。

答案 1 :(得分:0)

在这一行

Coordinate coordinate1 = *iterator1;

您正在复制迭代器指向的内容

你可能意味着

Coordinate& coordinate1 = *iterator1;

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

答案 2 :(得分:0)

我终于解决了这个问题。我的代码处于发布模式并且运行良好