std :: map使用迭代器查找距离,程序不会终止

当我编译(g++ -std=c++14 map.cpp并运行该程序时,它似乎没有终止。谁能解释为什么?但是,当我确实找到('a')而不是'c'时,它给出了零。

#include <iostream>
#include <string>
#include <vector>
#include <map> 
#include <algorithm>
using namespace std; 



int main()
{
    map<char,float> m;
    m['a'] = 3.4;
    m['b'] = 5.3;
    m['c'] = 33.3;
    m['d'] = 43.;

    auto it = m.find( 'c' );
    cout << "distance : " << std::distance( it,m.begin() ) << endl;

}

xiaoweiaosnao 回答:std :: map使用迭代器查找距离,程序不会终止

使用

std::distance( m.begin(),it  )

否则呼叫

std::distance( it,m.begin() )

具有未定义的行为,因为使用了无效的范围。在C ++中,范围指定为[first,last ),其中first在前或等于last。在后一种情况下,当first等于last时,范围为空。

根据C ++标准(27.4.3迭代器操作)

  

4效果:如果InputIterator满足随机访问的要求   迭代器,返回(最后-第一);否则,返回   从头到尾所需的增量

,

std::distance(first,last)first开始运行,并使迭代器前进,直到到达last。对于您而言,这永远不会发生,因为it最有可能在之后 m.begin()之后找到,因此它将永远循环。更改提供给std::distance

的参数的顺序

std::distance参考:

  

如果无法通过以下方式从第一个到达最后一个,则该行为是不确定的   (可能是重复的)先递增。

本文链接:https://www.f2er.com/3159523.html

大家都在问