6

イテレータを使用して、セットのすべてのメンバーを出力しようとしています。他のスタックオーバーフローの回答からわかる限り、正しいフォーマットを使用しています。このコードを実行すると、myset のサイズが 3 であることが正しく出力されますが、ii は 1 回しか出力されません。*iter を使用して行のコメントを外すと、Visual Studio は実行時例外をスローし、「マップ/セット イテレーターは参照解除できません。理由はありますか?

int main()
{
set<int> myset;
myset.insert(5);
myset.insert(6);
myset.insert(7);
set<int>::iterator iter;
cout<<myset.size()<<endl;
int ii=0;
for(iter=myset.begin(); iter!=myset.end();++iter);{
    //cout<<(*iter)<<endl;
    ii+=1;
    cout<<ii<<endl;
}
return 0;
}
4

1 に答える 1

13

この行に余分なものがあります;

for(iter=myset.begin(); iter!=myset.end();++iter);{

これは、ループの本体が実際には空であり、次の行が1回だけ実行されることを意味します。

したがって、その行を次のように変更します。

for(iter=myset.begin(); iter!=myset.end();++iter) {
于 2012-05-24T17:38:26.557 に答える