Initialisation vectorielle multidimensionnelle
J'ai suivantes std::vector
déclaration:
std::vector<std::vector<std::vector<int> > > m_input;
Je suis l'initialiser comme suit:
m_input.resize (100);
m_output.resize(100);
for (int i = 0; i < 100; ++i) {
m_input [i].resize(100);
m_output[i].resize(100);
for (int j = 0; j < 100; ++j){
m_input [i][j].resize(100);
m_output[i][j].resize(100);
}
}
Comment puis-je obtenir ce par le biais de la membre de la liste d'initialiseur?
source d'informationauteur Avinash | 2011-06-27
Vous devez vous connecter pour publier un commentaire.
std::vector<T>
a un constructeur qui prend deux arguments, un certain nombre d'éléments et une valeur initiale. Dans votre cas, vous voulez initialiserm_input
à 100 exemplaires d'unstd::vector<std::vector<int> >
, de sorte qu'il serait: m_input(100, X)
. Maintenant, queX
à son tour, est un vecteur de 100std::vector<int>
qui à son tour contient une centaine ints:: m_input(100, std::vector<std::vector<int> >(100, std::vector<int>(100, 0)))
Cela dit, la mise en œuvre d'un multi-dimensionnelle champ doit être fait en les projetant dans un seul dimensions, comme Viktor dit dans son commentaire à la question.
Si vous pouvez affirmer que votre vecteur de dimensions vont être d'une longueur fixe, alors pourquoi ne pas utiliser
std::array
?Par exemple:
std:array<std::array<std::array<int, 100>, 100>, 100>
De cette façon, vous pouvez profiter de toute la mémoire alloué contigu (comme signalé par Viktor_Sehr dans les commentaires), sans la mise en œuvre des malheurs de l'accès à un 1-dimensions tableau en 3 dimensions.