使用变量获取 STL 容器的 size_type

Get to STL container's size_type using a variable

我想以一种简单的方式编写基于索引的 for 循环。由于我的代码必须在 32 位和 64 位中 运行,我收到很多关于隐式转换的警告,因为我通常使用 32 位整数,但 STL 在 64 位中使用 64 位整数。

std::vector<MyClass> c;
for (FOO ui = 0, uiEnd = c.size(); ui < uiEnd; ++ui){...}

我更喜欢 FOO = c::size_type 这样的东西,它清楚地表达了正在发生的事情。但是是否可以仅使用变量 c 来获得 std::vector<MyClass>size_type?我尝试了以下操作但没有成功:

而您可能会使用:

std::vector<MyClass> c;

for (decltype(c)::size_type ui = 0, uiEnd = c.size(); ui < uiEnd; ++ui){...}

我会使用:

std::vector<MyClass> c;

std::size_t index = 0; // as you want index too
for (auto& myclass : c){...; ++index;}

甚至在 C++20 中:

std::vector<MyClass> c;

for (std::size_t index = 0; auto& myclass : c){...; ++index;}

ranges-v3enumerate 个视图:

std::vector<MyClass> v;

for (const auto& [index, myclass] : v | ranges::v3::views::enumerate) {
    // ...
}

Demo