在迭代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
中扣除其目标类型。)
答案 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_t
和container::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]
}