|
 |
Orchid XP v8 <voi### [at] dev null> wrote:
> Oh, er... can you have a vector of vectors? Or would it have to be a
> vector of vector pointers?
It's perfectly possible.
std::vector< std::vector<int> > vecvec;
vecvec.resize(10);
vecvec.at(5).push_back(42);
When you start having nested data containers, it may be useful to abstract
a bit, so that the syntax becomes easier, like this:
typedef std::vector<int> IntCont;
// Now 'IntCont' is a vector of ints
std::vector<IntCont> vecvec;
// 'vecvec' is a vector of vectors of ints
vecvec.push_back(IntCont()); // Put a new IntCont into the vector
vecvec.back().push_back(42);
Of course there's no limit on how many containers you can nest. You
could just go on:
typedef std::vector<IntCont> IntVecCont;
std::vector<IntVecCont> vecvecvec;
// Now 'vecvecvec' is a vector of vectors of vectors of ints.
Managing all this in your head might become a bit complicated, though. :)
In practice when you start needing such deeply nested containers, a good
idea is to start abstracting even more. The inner containers will usually
have a specific role, so you should make a class out of them, rather than
using the directly, and use some simple public interface with that class.
For example, if you want a vector of huffman trees, it would be a bad
idea to try to manage them directly. Instead, it's a much better idea to
abstract the whole huffman tree concept, and then use that as the element
of the outermost vector. In other words, something like:
class HuffmanTree
{
public:
// A nice and easy-to-use interface here
private:
typedef std::vector<int> IntCont;
std::vector<IntCont> theTree; // Or whatever
// Other possible private members
};
Now you can do this:
std::vector<HuffmanTree> trees; // A vector of huffman trees
So here you have three levels of nesting of vectors, but they are so
well abstracted that it's easily manageable. In the outermost layer you
only see the HuffmanTree class and its simple public interface.
--
- Warp
Post a reply to this message
|
 |