我的代码中有一个名为map<vector<double>,double>
的{{1}}元素。
我注意到我的代码的内存使用量趋于累积,直到我在我的机器上使用了整个可用内存(从~200 MB到~4GB)。注释掉我的代码中的东西我得出的结论是,访问此映射中的元素的行是一个注释掉的,阻止内存使用量增加的行。 我使用[]运算符访问该值,我认为这可能是因为double值与map中的值不完全相同。然后我搜索了一个可能是这样的情况:
EU
这里std::map<vector<double>,double>::iterator mit = EU.find(s);
if (mit == EU.end()){
for (int i = 0; i < 3; i++){
O.w(s[i]);
}
cin.ignore();
}
是一个函数在I类我创建的用于在屏幕上显示内容/写入硬盘的内容。在这种情况下,它只是O.w(s[i])
而我使用printf("%0.10f\n",s[i])
只是为了停止程序,所以我可以检查输出。
这也会导致内存使用量的增加。
为什么会这样,我该如何防止这种情况?
感谢。
答案 0 :(得分:3)
当您访问std::map
中的元素时,如果索引没有关联值,则会创建一个新元素。因此,每次使用新密钥访问地图时,都会创建一个新节点,以保存新的std::vector< double >
密钥和double
值。