Can we have vector of vector?
e.g.
vector <vector<string>>vBig;
Printable View
Can we have vector of vector?
e.g.
vector <vector<string>>vBig;
Yes.
Thanks a lot nvoigt. :-)
But you need to put a space between the two >, or the compiler will parse it as a >> operator.
Thanks a lot CornedBee
AFAIK, MSVC has been smart enough to spot inccorect usage of templates in form of >> since earlier versions. It would complain >> is invalid with templates, it must be > >, but it doesn't report syntax error. It's just Microsoft went one step further to eleminate the restriction in later versions.
I don't really understand why the standard specifies you must use > > either, since it's rather absurd. It doesn't really matter if it can be mistaken for the operator or not, since it's the compiler vendor's work to make sure it works. It messes up style too. Microsoft's compiler can do it, so why not others?
Looking on the good side, at least the non-portable code will become standard (and hopefully portable) in a few years' time (C++0x).Quote:
According to the standard probably, but newer versions of MSVC have actually been made smart enough to work out what you mean when you use >> there, if it can.
Note that this is not really a good thing either as it encourages you to write non-portable code.
The principle of greedy matching. However, eventually the C++ standard committee people decided that it is better to just let the more natural syntax be used, thus the change.Quote:
I don't really understand why the standard specifies you must use > > either, since it's rather absurd.
Yeah, and another thing I hate about MSVC is that it doesn't complain if you forget to include a standard header file and silently includes it for you. Then you try compiling on UNIX and get errors about the missing header files. Maybe there's a switch to turn off that "feature", but I haven't been motivated enough to look for it yet.
There's an option to turn off Microsoft extensions. Only problem is that it's rather useless since it produces tons of errors if you include typical Windows headers!
I'm thinking you should be able to turn off (and on) an option dynamically; otherwise it's rather useless.
It does no such thing. It's just that some standard library parts are implemented in terms of other parts. For example, some parts of <locale> require the std::string class. Also, some parts of the stream library require locales. Thus, when you #include <iostream>, you get parts of the locale system and thus parts of the string library.
This problem affects all standard libraries, but to different degrees. Some go to greater pains in order to avoid this stuff, others to lesser. In one library you may get A by including B, in the other you may get B by including A. And so on.
Nothing MS-specific.
Oh I would have to disagree with the "Nothing MS-specific" part. If you forget even a single header file gcc will complain, but MSVC compiles without so much as a peep. Whether this is intentional or simply because required headers were included by other headers, I don't know, but the result is annoying nonetheless.
I have not encountered this to my knowledge. What functions is that and what headers?
Here's an example where <cstdio> & <cstring> are required, but VC++ compiles it anyways. They're probably included in <iostream> because if you remove that, you get the expected errors.
Code:#include <iostream>
//#include <cstdio>
//#include <cstring>
using namespace std;
int main()
{
char str[] = "fdsfsdfsdfs";
printf( "str has %d chars", strlen( str ) );
return 0;
}
Indeed. They are included automatically. I find it convenient, though, not annoying.Code:1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\iostream
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\istream
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\ostream
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\ios
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xlocnum
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\climits
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\yvals.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\sal.h
1>Note: including file: h:\apps\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtassem.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\vadefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\use_ansi.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\limits.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\cstdio
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\stdio.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\swprintf.inl
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\cstdlib
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\stdlib.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\streambuf
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xiosbase
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xlocale
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\cstring
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\string.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\stdexcept
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\exception
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xstddef
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\cstddef
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\stddef.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\eh.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\malloc.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xstring
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xmemory
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\new
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xutility
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\utility
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\iosfwd
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\cwchar
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\wchar.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\wtime.inl
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdbg.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\typeinfo
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xdebug
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xlocinfo
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\xlocinfo.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\ctype.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\locale.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: H:\Apps\Microsoft Visual Studio 9.0\VC\include\share.h
I don't see what's so wrong with it?