gpt4 book ai didi

c++ - 为什么 std::bitset 不带有迭代器?

转载 作者:IT老高 更新时间:2023-10-28 21:37:03 26 4
gpt4 key购买 nike

看来 std::bitset不附带 STL 迭代器。
因此,我不能执行以下操作:

std::bitset<8> bs;
for (auto it: bs) {
std::cout << "this can not be done out of the box\n";
}

相反,我必须:

std::bitset<8> bs;
for (std::size_t i = 0; i < bs.size(); ++i) {
std::cout << bs[i] << '\n';
}

没有迭代器,我也无法将位集与任何 STL 算法一起使用。
为什么委员会决定从 bitset 中排除迭代器?

最佳答案

我认为从未有过将迭代器从位集中排除的实际决定。

相反,bitset 是在提议将原始标准模板库添加到 C++ 标准之前的类之一。在设计时,基本上没有标准库包含迭代器。

然后,有人提议添加 Stepanov 的库,其中相当一部分被接受了。作为回应,添加了一些现有的类(例如,std::string),以允许它们像新的容器类一样使用。

不过,这一切都发生在标准流程的后期——事实上,他们已经在一些地方改变了规则以添加他们所做的事情。除其他外,几乎在将容器/迭代器/算法添加到库中的同时,委员会投票考虑标准“功能完整”,因此从那时起他们只致力于修复错误等,不添加新功能。

因此,即使已经编写了向 bitset 添加迭代器接口(interface)的提案,委员会可能接受它的唯一方法是将其视为已修复的错误,而不是而不是添加新功能。如果有一个非常可靠的提议,我想他们可以这样做,但我不认为有这样的提议,而且它会有点牵强,所以即使是一个非常好的提案也可能很容易被拒绝。

从那时起,有一个提案,LEWG 1112 ,这将向 std::bitset 添加一个迭代器接口(interface)。这是针对 C++11 提出的,并且是专门为支持 C++11 中添加的基于范围的 for 循环而提出的。它遭受了相当可耻的命运:它最初被接受,并起草了措辞。然后看起来在语言中添加概念的提议会被接受,所以这个措辞被重写以使用 Shiny 的、美妙的新概念。一段时间后,概念被从语言中删除,而不是重新措辞使其不再依赖于概念,他们暂时将其标记为“NAD Future”,这意味着他们将其视为不是缺陷,并推迟了任何进一步的工作直到将来某个(不确定的)时间(据我所知,从那以后就没有重新访问过)。

关于c++ - 为什么 std::bitset 不带有迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com