C++ copie vecteur multidimensionnel
Je vais avoir des problèmes lors de la copie d'un vecteur multidimensionnel, j'ai essayé beaucoup de choses, mais c'est la dernière:
vector < vector < int > > a;
vector < vector < int > > b;
a.resize(10);
b.resize(10);
a[0][0] = 123;
copy( a.begin(), a.end(), back_inserter(b) );
cout << b[0][0];
Je suis en train de faire une boucle récursive qui compte toutes les voies possibles dans une grille à l'intérieur de 10 mouvements. Je suis en train de créer un vecteur appelé current_path
qui tiendrait le chemin d'accès actuel pour chaque récursion, lorsque le current_path
a 10 se déplace, Il va copier les données à partir de current_path
à all_paths
.
La grille qui va comme ceci:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Vous ne pouvez déplacer un carré, vous touchez donc de 0, vous pouvez passer à 1, 4 et 5. Et de 1 à 3, 4, 5, 6 etc.
L'idée principale est de copier le current_path
pour le prochain appel de la fonction (récursive) de sorte qu'il tiendrait le curren_path
jusqu'à ce point, jusqu'à ce que il est plein (10 étapes). Après c'est copié à partir de current_path
à all_paths
je suppose que je dois supprimer la current_path
?
Je sais comment calculer efficacement toutes les étapes, mais je vais avoir des problèmes lors de la copie de la current_path
et probablement et comment puis-je ajouter de la current_path
à all_paths
quand je suis à 10 étapes?
- Voici une réponse à une question similaire, j'ai répondu hier, il vous suffit de remplir le vecteur avec des nombres et de changer les numéros de la façon dont vous en avez besoin stackoverflow.com/questions/13552430/...
Vous devez vous connecter pour publier un commentaire.
Il y a quelques problèmes avec votre code. D'ici à la fin de la ligne 4, vous avez deux vecteurs qui contiennent chacun 10 vide vecteurs. Vous pourriez visualiser comme ceci:
Ces centre de vecteurs n'ont pas encore tous les éléments, donc quand vous essayez de le régler
a[0][0]
à123
, vous avez accès à un élément qui n'existe pas, en invoquant un comportement indéfini.Si cela a fonctionné, votre utilisation de
std::copy
serait tout simplement copier chacun des vecteurs dea
et poussé à l'arrière deb
. Depuisb
en est déjà à 10 éléments, il y aurait aujourd'hui à 20 éléments.Puis vous essayez de sortie
b[0][0]
qui n'existe pas, tout autant quea[0][0]
n'ai pas non plus.La solution ici est d'utiliser simplement la copie opérateur d'affectation définies par
std::vector
:a
est unvector
. Le redimensionnement d'unevector
donne N initialisé par défaut des éléments. Chaque élément dea
est unvector
et quand ils le sont par défaut initialisé ils sont vides. Si bien que le redimensionnementa
vous donne 10 videvector
s.Il vous suffit de faire
b = a;
std::vector
définit un copie opérateur d'affectation qui fait un elementwise copie. Cela va appeler l'opérateur d'assignation de copie de l'intérieur, vecteur, des copies de laint
s.Au lieu de
Vous voulez faire de la
parce que tout
resize
crée 10 nouveaux vecteurs de l'extérieur vecteur, intérieure ces vecteurs ont une longueur de 0, ce faisant,a[0][0]
vous donnera un élément d'un passé la fin de la première intérieure vecteur.Également, aussi longtemps que vous le créer les vecteurs de la pile (comme vous l'avez fait), vous n'aurez pas besoin de supprimer quoi que ce soit; ils ont automatique de la durée de stockage.
Voici la version corrigée de votre code: