为什么下面代码中的迭代不起作用?我的意思是迭代器递增但是评估此表达式o!=RateCurve.end()
总是给true
。
我需要这样一个功能,因为我在地图的包装中使用它来构建利率曲线。
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string>
#include <map>
#include <exception>
#include <vector>
#include <stdio.h>
using namespace std;
map<double, double>::iterator getIt(map<double, double> o){
return o.begin();
}
int main ()
{
map<double, double> RateCurve;
RateCurve[3.3 ]=0.034 ;
RateCurve[1.2 ]=0.03 ;
RateCurve[0.2 ]=.001 ;
RateCurve[6.1 ]=.023 ;
map<double, double>::iterator o=getIt(RateCurve);
while (o!=RateCurve.end()){
cout << "RateCurve[" << o->first << "] = " << o->second << endl;
++o;
}
}
答案 0 :(得分:3)
SignUpLogin.storyboard
您复制getIt(map<double, double> o)
,因此迭代器将点返回到您想要的完全不相关的map
。更糟糕的是,副本在函数调用结束时被销毁,并且您尝试使用的迭代器不再有效,因此您有Undefined Behaviour。
让map
作为参考,由于您实际上并未更改元素,因此您也可以将其getIt
。然后你需要改变返回类型:
const
另外,请重新考虑您对不良做法的使用using namespace std;
和endl
。