为什么从C ++ 11中删除了对范围访问?
|
我只是发现,在某个时候,C ++ 11草案对
std::pair
具有std::begin
/std::end
重载,从而允许将一对迭代器视为适用于基于范围的for循环的范围(N3126,第20.3.5.5节),但这已被删除。
有谁知道为什么要删除它?
我发现删除非常不幸,因为似乎没有其他方法可以将一对迭代器视为一个范围。确实:
在基于范围的for循环中begin / end的查找规则说,begin / end在1)中作为范围对象的成员函数进行查找2)作为“关联名称空间”中的自由函数
std::pair
没有开始/结束成员功能
通常,ѭ4的唯一关联名称空间是名称空间std
不允许我们为std::pair
超载std::begin
/std::end
我们不能将std::begin
/std::end
专门化为std::pair
(因为专业化必须是局部的,而函数则不允许这样做)
还有其他我想念的方式吗?
没有找到相关结果
已邀请:
3 个回复
青董据零
的支持。但是,建议的解决方案尚未完全采用。 如果确定某些迭代器确实代表一个有效范围,则可以将它们包装到提供begin()/ end()成员函数的自定义类型中:
(未试) 我同意这有点疣。返回有效范围的函数(如equal_range)应使用适当的返回类型声明。我们不得不通过类似于上面的
进行手动确认,这有点尴尬。
剑哎
。 它使用
和
方法构造一个iterator_range。
可以接受
的迭代器。
羔磺