lau*_*ent 10 c++ indexing types loops stdvector
我通常以这种方式迭代一个向量:
for (int i = 0; i < myVector.size(); i++) {
Element* e = myVector[i];
}
Run Code Online (Sandbox Code Playgroud)
但是编译器通常会给我这个警告:
warning: C4018: '<' : signed/unsigned mismatch
Run Code Online (Sandbox Code Playgroud)
所以,如果a int
不正确,索引应该是哪种类型?vector :: size()似乎是"size_type"类型,但我宁愿使用更有意义的类型.有什么建议吗?
Naw*_*waz 14
你应该使用std::vector<T>::size_type
1.它的无符号整数类型.它通常与...相同size_t
.
要知道之间的区别size_type
和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)
{
}
Run Code Online (Sandbox Code Playgroud)
它不看.事实上它有时会令人恼火.在这种情况下,一些程序员更喜欢索引而不是迭代器.
在C++ 0x中,迭代器已经变得更加惯用了.现在你可以使用迭代器而不会使语法繁琐:
for(auto it = v.begin(); it != v.end(); ++it)
{
}
Run Code Online (Sandbox Code Playgroud)
甚至更好,使用基于范围的 for循环:
for(auto & item : v)
{
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7212 次 |
最近记录: |