are nice, form the basis for generic programming
and the STL
(part of the standard C++ library
), and all the other neat trick
s you see when you read the glossy magazine
Even the syntax is straightforward. (Using the STL,) to declare a vector of ints, you just have to say
vector<int> x;. A vector of elements of type T is vector<T>. Simple!
So what happens if you want x to be a vector of vectors of ints? Simple logic would suggest
So much for logic
. C++ and C
share the same lexer
. And that lexer believes with all its might that "the next token is always the longest one
." And it has excellent reasons for believing that.
See the problem? In the above code the token >> appears! That is not legal C++ code (and cannot be made legal without breaking every lexical convention in C++). The solution is absolut C++: sully your beautiful idea with an ugly kluge. Just add whitespace.
vector<vector<int> > x;
legal C++ (not to mention recommended practice