I usually iterate over a vector that way:
for (int i = 0; i < myVector.size(); i++) {
Element* e = myVector[i];
}
But then the compiler usually gives me this warning:
warning: C4018: '<' : signed/unsigned mismatch
So if an int is not right, which type should the index be? vector::size() seems to be of a “size_type” type, but I’d rather use a more meaningful type. Any suggestion?
You should use
std::vector<T>::size_type1. Its unsigned integral type. Its usually same assize_t.To know the difference between
size_typeandsize_t, see this topic:1. Similarly, you can use
std::string::size_type,std::list<T>::size_type,std::deque<T>::size_type,std::set<T>::size_type, and so on. Almost all standard containers define a nested type calledsize_type.One can argue that you should use iterator instead of index. But I also see that sometime iterator makes the for-loop very wide horizontally, see this :
It doesn’t look. It in fact irritates sometimes. In such situations, some programmers prefers index over iterator.
In C++0x, iterator has been made more idiomatic. Now you can use iterator without making the syntax cumbersome:
Or even better, using range-based for loop: