Différence entre vector <int> V[] et vector< vector<int> > V

vector <int> V[] et vector< vector<int> > V les deux sont tableau 2D.

Mais qu'est-ce que le différence entre leur et où nous utilisons ce dans différents endroit?? Veuillez donner une brève explication.

  • Aucune de ces est un tableau 2d. Les deux sont des tableaux de tableaux. La seule syntaxe disponible en C++ pour un tableau 2d est celui hérité de la C. (Parce que std::array peut avoir de remplissage, voir stackoverflow.com/q/19103244/103167)
  • Comment peut-or-insigne de C++ grok appeler l'une de ces deux un "tableau de tableaux"?
  • Car l'expression anglaise "tableau d'" n'est pas particulièrement précis. Si je dis "j'ai un tableau de Widgets", je ne vous ai pas parlé si je suis de la gestion de cette matrice avec un pointeur intelligent / wrapper collection, ou si j'essaie de tenir les Widgets directement, via la composition, par référence (à l'aide d'un pointeur, bien sûr, puisque vous ne pouvez pas avoir une collection dont le type d'élément est un C++ type de référence). De sorte que tous Widget[N], std::unique_ptr<Widget[]>, std::vector<Widget>, std::vector<WidgetBase*>, std::vector<std::unique_ptr<Widget>> sont, en anglais, "tableau de Widget". Pour être plus précis, disons le type
  • Dans ce cas, il y a certainement de multiples tableaux de int, (l'une tenue par chaque std::vector<int>), et ceux-ci sont conservés dans un autre tableau.
  • Je m'attends à tout collègue de ne pas appeler un std::vector<> un "tableau", jamais. C'est tout ce que je dis.
  • De style C les tableaux sont également fait des tableaux de tableaux