그냥 iterator와 비교하여 const_iterator를 사용하는 것에 관한 질문입니다. 보다 구체적으로 distance()를 사용합니다. 아래는 사용자가 입력하는 "fav_games"목록을 응용 프로그램의 앞 부분에서 찾아내는 기본 코드입니다. 나는 또한 번호 매기기 목록을 출력하기 위해 벡터의 '색인'을 쓰레기로 만들고 싶었다.iterator VS const_iterator, distance()와 함께 사용하기
부분 코드 :
int main()
{
vector<string> fav_games;
vector<string>::const_iterator iter; // const_iterator no worky with "distance()"
if (fav_games.size() > 0) {
cout << "\n\nCurrent game list: \n";
for (iter = fav_games.begin(); iter != fav_games.end(); ++iter)
{
cout << distance(fav_games.begin(), iter) << ". " << *iter << endl;
}
}
return 0;
}
내 질문은 왜 "const_iterator를"I "가 반복자"대신 사용하도록 강요하고, 여기서 작동하지 않습니다이다. 그 뒤에있는 '이론'을 찾고 있습니다. "distance()"는 "const_iterator"가 아닌 "iterator"와 "iterator"를 나타냅니다. ..왜?
그냥 내가 "const_iterator를"사용하는 경우 참조 컴파일 오류 :
오류 1 오류 C2782 : 'iterator_traits를 < _Iter> :: difference_type 표준 : 거리 (_INIT, _init)': 템플릿 매개 변수 '_INIT' 모호하다 z : \ micah \ C++ \ favgames \ favgames \ favgames.cpp 49 1 favgames
고마워!
의 두 인수의 유형 'distance'는 같아야합니다 (템플릿 인자를 추론 할 경우). 그래서 C++ 11에서는'.cbegin()'과'const_iter'를 사용해야했습니다. RandomAccessIterators의 경우 '-'도 사용할 수 있습니다. 'iter - fav_games.begin()' – dyp
굉장합니다, 고마워요! – Micah