J'ai une période difficile à faire envelopper ma tête autour de la manière d'initialiser un vecteur de vecteurs.
Typef vecteur je veux que cela soit conforme à p> adressant les éléments n'est pas le problème. Cela devrait être aussi simple que quelque chose comme P> for 0..1
for 0..6
for 0..479
for 0..30
dc[i][j][k][l] = 0.0;
3 Réponses :
Vous devrez probablement définir une taille ou une mémoire de réserve
pourriez-vous faire un pour chacun ou une nichée pour cela appellerait p> à chaque niveau. p> p>
.Size () vérifie la taille actuelle du vecteur. Vous voulez .Resize ().
s'il vous plaît S'il vous plaît la chose à propos de qui dit p> oui, Vous devez faire quelque chose avant de pouvoir indexer dans le vecteur. Vous pouvez initialiser par défaut - initialiser le vecteur avec la quantité de zéros appropriée d'abord, puis les remplacer, en utilisant le car une "construite par défaut" int comporte la valeur 0. p> Dans votre cas, nous devons spécifier la taille de chaque dimension, en créant des sous-vecteurs qui sont de la taille appropriée et de laisser le constructeur les copier. Cela ressemble à: p> c'est-à-dire, un Il existe d'autres approches, mais elles sont beaucoup maladroit si vous voulez juste qu'un tas de zéros commence. Si vous allez lire l'ensemble du jeu de données à partir d'un fichier, cependant: p> Vous pouvez utiliser Vous pouvez redimensionner un vecteur à l'avance avec boost :: Array code>. De cette façon, vous bénéficiez de tous les avantages d'avoir un tableau uni (économiser d'énormes quantités d'espace lorsque vous allez multidimensionnel) et les avantages d'avoir une réelle instanciation d'objet. P> LI>
boost :: multi_array code>. De cette façon, vous documentez "Ce stockage est rectangulaire", économisez d'énormes quantités d'espace et permet de redimensionner la capacité de redimensionner, d'avoir un objet réel, etc. P> Li>
std :: vecteur code> est-ce que c'est (a) est censé être redisisable et (b) ne se soucie pas de son contenu dans le moindre, à condition qu'ils soient de le bon type. Cela signifie que si vous avez un
vectoriel
std :: vecteur code> réaffectés.
Boost :: Multi_array Code> est conçu avec l'attente que vous souhaitiez peut-être le redimensionner, mais ne le redimensionnez pas en permanence par des éléments ajoutés (lignes, pour une matrice / faces à 2 dimensions, pour un 3 Array-dimension / etc.) à la fin.
std :: vecteur code> est conçu pour (potentiellement) des gaspilles pour vous assurer que l'opération n'est pas lente.
Boost :: Multi_array Code> est conçu pour économiser de l'espace et garder tout ce qui est soigneusement organisé en mémoire. P>
std :: vecteur code> ne fera pas par magie que les index se présentent dans l'existence parce que vous souhaitez stocker quelque chose là-bas. Cependant, il est facile de traiter: p>
(taille_t n, const t & valeur = T ()) code> constructeur. C'est-à-dire p>
d1 code> est construit de la taille 31, utilisé pour initialiser le
d2 < / code>, qui est utilisé pour initialiser le
d3 code>, utilisé pour initialiser
résultat code>. p>
.push_back () code> pour ajouter un vecteur. Fabriquez un
d1 code> juste avant la boucle la plus intérieure, dans laquelle vous êtes à plusieurs reprises
.push_back () code> pour le remplir. Juste après la boucle, vous
.push_back () code> le résultat sur le
d2 code> que vous avez créé juste avant la prochaine boucle la plus interne, etc. p> li>
.Resize () code>, puis l'indice normalement (jusqu'à la quantité que vous avez redimensionnée). P> li>
ul> ul>
Construction soignée là-bas. Je vais donner un coup de pouce multi_eloppe. Merci pour la réponse en profondeur.
Dans la nouvelle norme C ++, la fonctionnalité de boost :: Array code> est fournie par
std :: Array code> dans la bibliothèque standard.
Edit: j'avouer que ce code n'est pas élégant. J'aime @karl réponse quelle est la bonne façon d'y aller.
Ce code est compilé et testé. Il imprimait 208320 zéros qui sont attendus (2 * 7 * 480 * 31) p>
C'est exactement ce que j'ai réalisé environ 30 secondes après avoir posté. Cela devrait fonctionner, mais Boost Multi_array de Karl semble être un meilleur choix.