#include #include <vector> template <typename Type, int Size> class StaticArray { public: StaticArray() { } ~StaticArray() { } Type operator[](int i) const { // To check: i >= 0 && i < Size return _tab[i]; } Type& operator[](int i) { // To check: i >= 0 && i < Size return _tab[i]; } private: Type _tab[Size]; }; int main() { StaticArray tab1; for (int i = 0; i < 5; ++i) { tab1[i] = i * 5; std::cout << tab1[i] << std::endl; } std::vector<StaticArray*> vect; vect.push_back(&tab1); for (int i = 0; i < 5; ++i) std::cout << (*vect[0])[i] << std::endl; return 0; }
#include #include <vector> #include <cassert> template <typename T> class Array { typedef typename std::vector*>::const_iterator iter; public: Array() : _hasList(true) { } Array(const Array<T>* array) : _hasList(true) { _list.push_back(array); } Array(T value) : _hasList(false), _value(value) { } ~Array() { for (iter it = _list.begin(); it != _list.end(); ++it) delete *it; } bool hasList() const { return _hasList; } T getvalue(int i) const { assert(!_hasList); return _value; } void setvalue(T value) { assert(!_hasList); _value = value; } void add(Array<T>* list) { assert(_hasList); _list.push_back(list); } void add(T value) { assert(_hasList); _list.push_back(new Array<T>(value)); } Array<T>* getList(int i) const { assert(!_hasList); return _list[i]; } void show(std::ostream& out) const { if (_hasList) { out << "<"; bool first = true; for (iter it = _list.begin(); it != _list.end(); ++it) { if (!first) out << ","; else first = false; (*it)->show(out); } out << ">"; } else out << _value; } private: const bool _hasList; std::vector*> _list; T _value; }; int main() { // <1,<9,3>,5,<0,<2,7,<4,5>,8>>> Array list; Array* tab45 = new Array; tab45->add(4); tab45->add(5); Array* tabRight = new Array; tabRight->add(2); tabRight->add(7); tabRight->add(tab45); tabRight->add(8); Array* tab2Right = new Array; tab2Right->add(0); tab2Right->add(tabRight); Array* tab93 = new Array; tab93->add(9); tab93->add(3); list.add(1); list.add(tab93); list.add(5); list.add(tab2Right); list.show(std::cout); std::cout << std::endl; return 0; }
vector<vector>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionYop!
Et pourquoi pas un vecteur de vecteur?
Code C/C++ :
vector<vector>
Évite les using namespace std, voir: sur http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
Si tu cherches à faire des vector de vector, deux solutions:
- std::vector<std::vector > évidemment, ou std::vector<std::vector* > (mieux)
- Boost_multi_array
- std::vector<StaticArray >, qui est le plus simple à mettre en place, surtout si tu as une dimension fixe.
1) Pourquoi cherches-tu à faire cela ?
En effet: <,a>>,e,<g,c>,i> peut tout à fait s'écrire: , non ?
De plus, je ne vois pas l'intérêt d'avoir ce genre de structure. Est-ce que tu n'essaierais pas de trouver une solution à un faux problème ?
2) Pourquoi parles-tu de récursivité ? Structure imbriquée != récursivité.