在带有 const_iterators 的容器上使用 for_each?

Using for_each on container with const_iterators?

如果您使用这个优雅的公式迭代 std 容器:

for (auto& item: queue) {}

它将使用队列的 beginend 函数。

有没有办法在不修改队列源的情况下使用 cbegincend

我试过

for (const auto& item: queue) {}

但是如果缺少 beginend,则无法编译。

Is there a way to use cbegin and cend without modifying the queue's source?

在C++20中,可以用queue.cbegin()queue.cend()构造一个ranges::subrange:

#include <ranges>

for (auto& item: std::ranges::subrange(queue.cbegin(), queue.cend())) {}

你想要for (auto& item : std::as_const(queue)) {}。它仍然调用 begin() 但它是 const 所以它选择了 const 重载。