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);
我有一个列表,我正在使用迭代器在列表中定位一个项目:
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);