gpt4 book ai didi

c++ - 为什么这个 multiset 打印代码会导致永远循环?

转载 作者:太空狗 更新时间:2023-10-29 23:46:07 27 4
gpt4 key购买 nike

我想打印出多重集中的每个重复项,但不知何故迭代器对我来说表现得很奇怪。如何修复此代码?这段代码导致了一个永远的循环,这让我很惊讶。

#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);
}

编辑我在循环结束时添加了一个 --it

  for (unsigned i = 0; i < count; ++it, ++i)
error_msg << "\tNum:" << *it << "\n";
--it; // this line fix it
}

最佳答案

for (unsigned i = 0; i < count; ++it, ++i)当这个循环结束时,it将等于 mset.end()因为你还有另一个++it从主循环中,您得到的东西与 mset.end() 不同因此程序永远不会结束。

关于c++ - 为什么这个 multiset 打印代码会导致永远循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com