c – 迭代向量的元素时,索引类型应该是什么?

前端之家收集整理的这篇文章主要介绍了c – 迭代向量的元素时,索引类型应该是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Iteration over std::vector: unsigned vs signed index variable16个
我通常以这种方式迭代一个向量:
for (int i = 0; i < myVector.size(); i++) {
    Element* e = myVector[i];
}

但是编译器通常会给我这个警告:

warning: C4018: '<' : signed/unsigned mismatch

因此,如果int不正确,索引应该是哪种类型? vector :: size()似乎是“size_type”类型,但我宁愿使用更有意义的类型.有什么建议吗?

解决方法

你应该使用std :: vector< T> :: size_type1.它的无符号整数类型.它通常与size_t相同.

要了解size_type和size_t之间的区别,请参阅以下主题

> C++ for-loop – size_type vs. size_t

1.同样,你可以使用std :: string :: size_type,std :: list< T> :: size_type,std :: deque< T> :: size_type,std :: set< T> :: size_type等等上.几乎所有标准容器都定义了一个名为size_type的嵌套类型.

有人可能会说你应该使用迭代器而不是索引.但我也看到有时iterator使for循环水平非常宽,请看:

for(std::vector<std::vector<std::string> >::iterator it = v.begin(); it != v.end(); ++it)
{
}

它看起来不像.事实上它有时会令人恼火.在这种情况下,一些程序员更喜欢索引而不是迭代器.

在C 0x中,迭代器已经变得更加惯用.现在你可以使用迭代器而不会使语法变得麻烦:

for(auto it = v.begin(); it != v.end(); ++it)
{  
}

甚至更好,使用基于范围的for循环:

for(auto & item : v)
{
}

猜你在找的C&C++相关文章