マルチセットからすべての重複を出力したいのですが、どういうわけかイテレータが奇妙に動作します。このコードを修正するにはどうすればよいですか? このコードは永久ループを引き起こします。これには驚かされます。
#include <set>
#include <iostream>
#include <sstream>
static void print_duplicate(const std::multiset<int>& mset)
{
std::stringstream error_msg;
for (auto it = mset.begin(); it != mset.end(); ++it)
{
unsigned count = mset.count(*it);
if (count < 2)
continue;
error_msg << "Duplicated numbers found:\n";
for (unsigned i = 0; i < count; ++it, ++i)
error_msg << "\tNum:" << *it << "\n";
}
std::cout << error_msg.str();
}
int main()
{
std::multiset<int> mset;
// fill it
mset.insert(1);
mset.insert(1);
mset.insert(1);
print_duplicate(mset);
}
EDIT サイクルの最後に --it を追加しました
for (unsigned i = 0; i < count; ++it, ++i)
error_msg << "\tNum:" << *it << "\n";
--it; // this line fix it
}