地图上的迭代器永远不会出现map.end()

时间:2016-03-08 16:35:28

标签: c++ iterator maps

为什么下面代码中的迭代不起作用?我的意思是迭代器递增但是评估此表达式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;
    }

}

1 个答案:

答案 0 :(得分:3)

SignUpLogin.storyboard

您复制getIt(map<double, double> o) ,因此迭代器将点返回到您想要的完全不相关的map。更糟糕的是,副本在函数调用结束时被销毁,并且您尝试使用的迭代器不再有效,因此您有Undefined Behaviour

map作为参考,由于您实际上并未更改元素,因此您也可以将其getIt。然后你需要改变返回类型:

const

另外,请重新考虑您对不良做法的使用using namespace std;endl