for ループを使用してコンテナーを反復処理すると、while ループを使用してコンテナーを反復処理する場合と異なる結果が生じる理由がわかりません。次の MWE は、ベクトルと 5 つの整数のセットを使用してこれを示しています。
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
vector<int> v;
set<int> s;
// add integers 0..5 to vector v and set s
for (int i = 0; i < 5; i++) {
v.push_back(i);
s.insert(i);
}
cout << "Iterating through vector with for loop.\n";
vector<int>::const_iterator itv;
for (itv = v.begin(); itv != v.end(); itv++) cout << *itv << ' ';
cout << '\n';
cout << "Iterating through set with for loop.\n";
set<int>::const_iterator its;
for (its = s.begin(); its != s.end(); its++) cout << *its << ' ';
cout << '\n';
cout << "Iterating through vector with while loop.\n";
itv = v.begin();
while (itv++ != v.end()) cout << *itv << ' ';
cout << '\n';
cout << "Iterating through set with while loop.\n";
its = s.begin();
while (its++ != s.end()) cout << *its << ' ';
cout << '\n';
}
上記は以下を生成します。
Iterating through vector with for loop.
0 1 2 3 4
Iterating through set with for loop.
0 1 2 3 4
Iterating through vector with while loop.
1 2 3 4 0
Iterating through set with while loop.
1 2 3 4 5
for ループは期待どおりに機能しますが、while ループは機能しません。私は++
後置として使用しているので、while ループがそのように動作する理由がわかりません。もう 1 つの謎は、while ループが5
for setを出力する理由です。s
これは、この数値が に挿入されていないためs
です。