C++,std::list,如何从迭代器计算索引

C++, std::list, how to calculate index from iterator

我有一个列表,我正在使用迭代器在列表中定位一个项目:

    std::list<std::string> groupsList = { Constants::Item1, Constants::Item2, ... };
    std::list<std::string>::iterator groupListItr = std::find(groupsList.begin(), groupsList.end(), group);

    if ( groupListItr == grousList.end() ) {
        return;
    }
    uint16_t groupIdx = (uint16_t)(groupListItr - groupsList.begin());

上面的find调用中"group"是要定位的字符串。我想弄清楚如何获取列表中找到的项目的位置,如果有更简单的方法请告诉我,索引的计算导致编译时出错:

    error C2784: 'unknown-type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>>'
    1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(937) : see declaration of 'std::operator -'

解决方法:

    uint16_t groupIdx = (uint16_t)std::distance(groupsList.begin(), groupListItr);