alternative to BOOST_FOREACH with std::set?
alternative to BOOST_FOREACH with std::set?
当您想迭代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)’
根据这个链接,这两者是不兼容的,因为std::set::iterator必须允许它所指向的值发生变化。
我可以想到一些笨拙的方法,但我想知道是否有一种更干净的方法来遍历集合。
适合我。也许你把BOOST_FOREACH的参数颠倒了。
#include <set>
#include <string>
#include <iostream>
#include <boost/foreach.hpp>
int main(int ac, char **av) {
std::set<std::string> nameSet(av+1, av+ac);
BOOST_FOREACH(const std::string& aName, nameSet) {
std::cout << aName << "n";
}
BOOST_FOREACH(std::string aName, nameSet) {
std::cout << aName << "n";
}
std::string aName;
BOOST_FOREACH(aName, nameSet) {
std::cout << aName << "n";
}
}
根据这个链接,这两者是不兼容的,因为std::set::iterator必须允许它所指向的值发生变化。
那个链接不是这么说的。你不能做的,以及那个链接说的不起作用的是:
BOOST_FOREACH(std::string& aName, nameSet) {
}
因为不能从const表达式形成非const引用。(即每个std::set
的const成员)
相关文章:
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 修改"std::set"中用户定义类型的值
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- 重构使用动态强制转换的 std::set 的比较运算符
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- std::set 是否将对象连续存储在内存中?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- 有什么理由不扩展 std::set 以添加下标运算符吗?
- 我从 std::set 得到const_iterator而不是迭代器
- 为什么 std:set(带有单个冒号)可以编译?
- 遍历 std::set 中包含的所有三重不同值?
- 插入 std::set 作为 std::map 的键
- 如何在 c++ 中使用默认值将 std::set 转换为 std::map
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- 如何从 std::set 绘制 n 个元素的样本
- 为什么 std::set 容器使用的内存比其数据大小多得多?