只是一个问题,关于使用const_iterator和只是迭代器。更具体地说,使用distance()。下面是一些基本代码,它们只列出了一个" fav_games"用户输入(在应用程序的早期)。我还希望废除'指数'向量,以打印出编号列表。
部分代码:
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;
}
我的问题是为什么,&#34; const_iterator&#34;不会工作,我被迫使用&#34; iterator&#34;代替。寻找理论&#39;在它背后。 &#34;距离()&#34;似乎期待和&#34; iterator&#34; - 不是&#34; const_iterator&#34;。 ..Why?
如果我使用&#34; const_iterator&#34;:
,仅供参考编译错误错误1错误C2782:&#39; iterator_traits&lt; _Iter&gt; :: difference_type std :: distance(_InIt,_InIt)&#39; :模板参数&#39; _InIt&#39;是不明确的z:\ micah \ c ++ \ favgames \ favgames \ favgames.cpp 49 1 favgames
谢谢!
答案 0 :(得分:1)
请改为尝试:
vector<string>::const_iterator b, iter, e;
if (fav_games.size() > 0) {
cout << "\n\nCurrent game list: \n";
for (b = fav_games.begin(), iter = b, e = fav_games.end(); iter != e; ++iter)
{
cout << distance(b, iter) << ". " << *iter << endl;
}
}
distance
对两个const_iterator
个实例或两个iterator
个实例没有问题。你的错误在于混合它们。
但是,O(n)
拨打distance
电话仍然很疯狂。只需使用一个柜台:
vector<string>::const_iterator iter, e;
size_t i;
if (fav_games.size() > 0) {
cout << "\n\nCurrent game list: \n";
for (i = 0, iter = fav_games.begin(), e = fav_games.end(); iter != e; (++iter), (++i))
{
cout << i << ". " << *iter << endl;
}
}
在C ++ 11及更高版本中,当然可以更进一步,完全避免使用迭代器:
if (fav_games.size() > 0) {
int i = 0;
cout << "\n\nCurrent game list: \n";
for (const string& game : fav_games)
{
cout << (i++) << ". " << game << endl;
}
}