首页 > 解决方案 > 使用变量获取 STL 容器的 size_type

问题描述

我想以一种简单的方式编写基于索引的 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,它清楚地表达了正在发生的事情。但是是否有可能size_typestd::vector<MyClass>使用变量c?我尝试了以下事情但没有成功:

标签: c++loopsauto

解决方案


而您可能会使用:

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;}

推荐阅读