std::vectors 中 size_type 的更短符号

shorter notation for size_type in std::vectors

在遍历 std::vector 时,我总是将索引变量声明为 size_type,如

std::vector<someReallyLengthy<TypeWith,SubTypes>> a(5);
for (std::vector<someReallyLengthy<TypeWith,SubTypes>>::size_type k = 0; k < a.size(); k++) {
  // do something with a[k]
}

我想知道在 C++11(或更高版本)中是否有一个 shorthand-notation 表示 size_type 这里。

auto 将无法工作,因为它无法从 0 中推导出其目标类型。)

你可以使用 decltype:

for (decltype(a)::size_type k = 0; k < a.size(); k++) {
  // do something with a[k]
}

除了 TartanLlama 的回答直接解决了您的问题外,请注意,在 c++11 中,您不必迭代索引:

for(auto &v: e)
    // Do something with v

而且,如果你真的想要索引,Nir Tzachar 和我有 ported much of Python's range stuff,所以你可以这样做:

for(auto &v: enumerate(e))
    // v has the index and value

(参见 enumerate 上的 more + 示例。)

使用范围循环:

for (/*const*/ auto& el : a){
 //do something with el
}

根据这个答案:'size_t' vs 'container::size_type'size_tcontainer::size_type 对于标准的 STL 容器是等价的,所以你也可以使用常规的 size_t

for (size_t i = 0; i<a.size();i++){
 //do something with a[i]
}

这是我的方式

std::vector<someReallyLengthy<TypeWith,SubTypes>> a(5);
auto length = a.size();
for (decltype(length) k = 0; k < length; k++) {
  // do something with a[k]
}