为什么在c++中程序在执行完成之前停止迭代
Why program stops iterating before execution is complete in c++?
我不知道为什么我的程序在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;
同样适用于内循环。你最终会得到很多副本。
终于解决了这个问题。在发布模式下运行我的代码,它工作得很好
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- 在向量内的向量上迭代
- 为什么output_editor Concept不需要output_e迭代器标记
- TSP递归解的迭代形式
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器