为什么即将到来的范围库不支持一个范围的容器初始化
Why does the upcoming Ranges library not support container initialization from a range?
简介
随着即将到来的范围库,需要用两个迭代器表示范围的需要几乎消失了。例如,而不是
if (std::equal(begin(foo), end(foo), begin(bar), end(bar)))
我们有
if (std::ranges::equal(foo, bar))
后者可以说是优越的,这不仅是因为它的简洁性,而且还因为它防止了省略end(bar)
和欢迎绑定错误的常见陷阱。
问题
以下代码怎么样?
std::vector<int> vec{begin(foo), end(foo)};
其中foo
是一个范围。使用范围,我希望将其简化为
std::vector<int> vec{foo};
但是,我没有在[vector]或[container.ulequirentess]中找到任何提及。山脉库也没有引入一组新的容器。
为什么范围库不支持一个范围的容器初始化?什么是理由?
C 20的目标是获得范围!在此之前,有几个障碍要克服,但是一旦克服了这些障碍,委员会可能认为最好是引入一个可行的山脉图书馆,这可能不是完整的,而不是根本没有范围。
。这并不是说此功能是不可取的,只是只剩下一些关于它的开放问题,但仍在进行中(请参阅P1206(。
如果人们读了本文修订版1的基本原理,则提到将构造函数添加到标准容器中被证明是不可行的。很可能是因为标准容器对初始化进行了太多的改装,以至于超负荷分辨率成为一场噩梦。
相关文章:
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何设置一个范围来提取我想要获得的信息
- 不计算一个范围内的完美数
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 在 C++20 中将多个范围适配器连接到一个范围中
- 转到基于范围的 for 循环中的下一个迭代器
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 有没有办法在另一个函数中加入线程?(即超出其自身范围)
- 如何将一个范围替换为矢量中的另一个范围?
- 包含来自另一个文件的函数会导致范围错误(openFoam)
- 定义一个 void f(void) 函数,但使用来自同一范围的变量?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- 将整数范围映射到另一个范围
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- 为什么基于范围的 for 循环中的结构化绑定只是一个副本而不是引用?
- 基于范围的 for 循环将对象移动到另一个容器中?