【发布时间】:2014-11-25 22:25:56
【问题描述】:
假设我有一个类型为c 的容器,它提供了一个size() 方法,我想在跟踪每个项目的索引的同时循环这个容器:
for (/*TODO*/ i = 0; i < c.size(); i++) {...}
在后 C++11 世界中,自动类型推导很好地解决了许多问题。我们应该用什么来代替上面的TODO?无论size() 是什么类型,我认为唯一正确的是以下内容:
for (decltype(c.size()) i = 0; i < c.size(); i++) {...}
但这似乎过于冗长,而且在我看来,这无助于可读性。
另一种解决方案可能是这样的:
for (auto end = c.size(), i = 0; i < end; i++) {...}
但这也无助于提高可读性,当然,与原始 sn-p 的语义也不相同。
所以,我的问题是:什么是推断循环索引变量类型的最佳方法,只给定索引限制的类型。
【问题讨论】:
-
好吧,您可以使用
foreach循环并且根本不用理会计数器 :) 所有标准容器类型通常定义size_type -
@user3159253:嗯,就我而言,我确实关心项目的索引 :-) 我也可能在处理非标准容器。
-
目标是编写不管
c类型如何都能正常工作的通用(即模板化代码),还是您只是在寻找一种适用于所有情况的最佳实践? -
使用迭代器、std 算法和 lambda,您不必担心太多。
-
@ChrisDrew:这更像是一个最佳实践问题。
标签: c++ c++11 type-deduction