std :: vectors中size_type的较短表示法

时间:2015-06-05 09:52:31

标签: c++ c++11 size

在迭代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(或更高版本)中是否有size_type的简写符号。

auto无法正常工作,因为它无法从0中扣除其目标类型。)

4 个答案:

答案 0 :(得分:1)

您可以使用decltype

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

答案 1 :(得分:1)

除了直接解决你的问题的TartanLlama的答案之外,请注意在c ++ 11中你不会限制迭代索引:

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

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

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

(请参阅enumerate +示例中的more。)

答案 2 :(得分:1)

使用范围循环:

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

答案 3 :(得分:0)

这是我的方式

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