我注意到大多数(如果不是所有)容器现在都需要它们的::iterator类型LegacySomethingIterator而不是SomethingIterator.
例如,std::vector<>::iterator 现在需要:
iteratorLegacyRandomAccessIterator
这似乎是大多数其它容器一样,都是需要自己迭代器从去SomethingIterator到LegacySomethingIterator.
还有"新"要求采用旧要求的名称,例如RandomAccessIterator,为什么这些要求被添加?在我看来,新的变种只会影响遗留的变种,没有差异.
为什么首先创建新的,他们的要求对我来说是一样的.为什么新的只是替换旧的要求而不是现在有两个不同的名称(例如RandomAccessIterator和LegacyRandomAccessIterator)?
许多标准库算法在 C++20 中有两个版本:一个在std命名空间中,另一个在std::ranges命名空间中同名。例如,std::ranges::count和std::count都用于计算满足谓词的元素的数量。
为什么这些算法有两个版本?
这个问题在这里的评论中进行了讨论。
在Eric Niebler的ranges-v3库(某种程度上已成为C ++ 20标准的一部分)中,它ranges::ostream_iterator是默认可构造的 -没有ostream。
怎么来的?
我认为后来具有有效构造的“虚拟”构造是C ++中的反模式,我们逐渐摆脱了这种疣。std::ostream iterator 只能使用流构造(目前-在C ++ 20之前)。而且,似乎我们无法使用默认构造的东西做任何事情range::ostream_iterator。。。所以,这是怎么回事?