用于循环索引类型演绎的最佳实践

Job*_*Job 11 c++ c++11 type-deduction

比方说,我有一个c提供size()方法的类型的容器,我想循环遍历这个容器,同时跟踪每个项目的索引:

for (/*TODO*/ i = 0; i < c.size(); i++) {...}
Run Code Online (Sandbox Code Playgroud)

在后C++ 11世界中,自动类型演绎很好地解决了很多问题.我们应该用什么来取代TODO上述?对我来说唯一正确的,无论类型size()是什么,如下:

for (decltype(c.size()) i = 0; i < c.size(); i++) {...}
Run Code Online (Sandbox Code Playgroud)

但这看起来过于冗长,在我看来,这无助于可读性.

另一种解决方案可能是:

for (auto end = c.size(), i = 0; i < end; i++) {...}
Run Code Online (Sandbox Code Playgroud)

但这也无助于可读性,当然,它与原始片段没有相同的语义.

所以,我的问题是:只给出索引限制的类型,推断循环索引变量类型的最佳方法是什么.

TNA*_*TNA 2

如果 c 是容器,您可以使用container::size_type.