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_t
和 container::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]
}
在遍历 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_t
和 container::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]
}