You will have 100 vectors (rows), each containing an empty vector. 100 rows, zero columns. You will now have to add (push_back) elements into the empty vectors.
The "best" way to instantiate a 2D vector is with known row and column sizes:
this is a 1-d array of 100 items. It is not 2-d at all, though you can 'interpret' it as 2-d yourself, as show above.
[100] is an initial size. just like an array, you know the size ahead of time and just use it. Unlike an array, this can be a variable in c++ (though compiler extensions allow variables on arrays, its technically not allowed). Unlike an array, you can change this size if you want to. Unlike arrays, the current size is part of the object -- you don't need a constant for the size or to track it yourself in the code or to pass it to all consumer functions.
without the initial size, you can use push-back or reserve or other vector methods to allocate space and size it for storing your data. push back will grow it for you, item by item. As with dynamic memory 'arrays', constantly resizing is expensive, so you want to think about that as you design code around vectors to avoid resize as much as possible for large #s of items.
the [size] vector lets you very easily convert old code with arrays to use vectors. the use notation is the same .. x[index] = value or the like; but you will need to adjust all the parameter passing and any pointer style access.
It would probably move the discussion forward in a better direction if you'd hint as to what you want to do.
It could be you found this in some code and just want to understand. Without more code, we can't really figure out why this was what the original author thought was useful.
It could be that you tried this toward some goal and need to figure out if it is useful.