Comment puis-je push_back de données en 2d vectoriel de type int
J'ai un vecteur et que vous souhaitez stocker des données int en elle au moment de l'exécution puis-je stocker les données dans un 2D vecteur de cette manière ?
std::vector<std::vector <int>> normal:
for(i=0;i<10;i++){
for(j=0;j<20;j++){
normal[i].push_back(j);
}
}
- Vous n'avez pas de "vectoriel 2d", vous disposez d'un vecteur de vecteurs de
int
. Si vous vous souvenez qu'il est facile de voir ce que vous devez faire: Repousser un vecteur pour chaque itération de la boucle externe. - ou si la taille est connue au moment de la déclaration que vous pourriez passer au constructeur ou appelez le redimensionner
- Merci pour l'explication, j'étais peu confus à ce sujet
Vous devez vous connecter pour publier un commentaire.
Oui, mais vous avez aussi besoin de pousser chacun des sous-vecteurs:
Vous manipulez un vecteur de vecteurs.
En tant que tel, lors de la déclaration de
normal
il est vide et ne contient aucun élément.Vous pouvez soit :
Redimensionner le vecteur avant d'insérer des éléments
Cela peut être légèrement plus efficace que de les pousser à un vecteur vide à chaque étape, comme proposé dans d'autres réponses.
Utiliser un plat de tableau 2D
Si vous souhaitez stocker un tableau 2D, ce n'est pas la solution optimale, car :
normal[i].size() == normal[j].size()
Au lieu de cela, vous pouvez utiliser un vecteur de taille
N * M
(oùN
est le nombre de lignes et deM
le nombre de colonnes), et accéder à un élément à la lignei
et les colonnesj
à l'aide de l'indice dei + j * N
:Vous ne pouvez pas affecter directement à
[i]
sans allocation de l'intérieur et l'extérieur des vecteurs d'abord. Une solution à ce problème serait de créer à l'intérieur des vecteurs à l'intérieur de votre boucle, puis une fois ceux-ci sont remplis, push_back à l'extérieur de vecteur.Vous avez un vecteur de vecteurs.
normale[je] N'existe pas, car vous n'avez pas encore créé il.
Ici est encore une approche.
La sortie du programme est
Vous pouvez écrire une fonction correspondante