I don't know what exactly you are having problems with. I would declare the sub-cubes as a vector of pointers to cubes, for example:
class Cube
{
Initialize (int depth);
...
vector<cube*> m_subCubes;
};
The Initialize function is called recursively, propagating depth - 1 to the next level. If depth is == 0 it returns immediately. Otherwise it creates the sub-cube objects and calls Initialize (depth - 1).
Same for your Analyze function.
Don't forget to delete the created sub-cubes in the destructor of your Cube class!