【发布时间】:2011-10-24 18:53:05
【问题描述】:
当您想要迭代 std::set 时,BOOST_FOREACH 的最佳替代方案是什么?
当我尝试执行似乎是一种迭代集合的合理方法时,我得到了编译错误。这段代码:
set<string> nameSet;
string aName;
BOOST_FOREACH(nameSet, aName) {
cout << aName << endl;
}
使用 gcc 4.4.3 生成此编译错误:
error: no match for ‘operator=’ in ‘nameSet = boost::foreach_detail_::deref [with T = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, C = mpl_::bool_<false>](((const boost::foreach_detail_::auto_any_base&)((const boost::foreach_detail_::auto_any_base*)_foreach_cur70)), 0u)’
根据this link,两者不兼容,因为 std::set::iterator 必须允许它所引用的值的突变。
我能想到一些笨拙的方法,但我想知道是否有更简洁的方法来迭代集合。
【问题讨论】:
-
如果您提出了一个合理的问题,除了您不完整的程序片段外,本可以给您 +1 分。请在您的问题中发布完整的、最少的程序——否则我们必须为您编写代码。见sscce.org。