在带有 const_iterators 的容器上使用 for_each?
Using for_each on container with const_iterators?
如果您使用这个优雅的公式迭代 std 容器:
for (auto& item: queue) {}
它将使用队列的 begin
和 end
函数。
有没有办法在不修改队列源的情况下使用 cbegin
和 cend
?
我试过
for (const auto& item: queue) {}
但是如果缺少 begin
或 end
,则无法编译。
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 重载。
如果您使用这个优雅的公式迭代 std 容器:
for (auto& item: queue) {}
它将使用队列的 begin
和 end
函数。
有没有办法在不修改队列源的情况下使用 cbegin
和 cend
?
我试过
for (const auto& item: queue) {}
但是如果缺少 begin
或 end
,则无法编译。
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 重载。