Je suis tombé sur une situation que je ne pouvais pas expliquer pourquoi. J'ai un vector<vector<pair<int, int> > > parent
qui indique parent
d'une cellule spécifique. J'ai le code suivant:traverse dans le vecteur <vecteur <paire <int, int>>>
// (1, 0), (1, 2), (1, 2)
// (1, 2), (-1, -1), (1, 2)
// (-1, -1), (2, 1), (-1, -1)
vector<vector<pair<int, int> > > nums = {
{make_pair(1, 0), make_pair(1, 2), make_pair(1, 2)},
{make_pair(1, 2), make_pair(-1, -1), make_pair(1, 2)},
{make_pair(-1, -1), make_pair(2, 1), make_pair(-1, -1)}};
int r = 0;
int c = 1;
while (nums[r][c] != make_pair(r, c)) {
cout << nums[r][c].first << " " << nums[r][c].second << endl; // 1, 2
r = nums[r][c].first; // 1
c = nums[r][c].second; // -1
cout << "r: " << r << " c: " << c << endl;
}
Je ne suis pas sûr de savoir pourquoi dans la première itération de boucle pour while
c = nums[r][c].second;
elle renvoie -1 au lieu de 2.
À ce stade, vous avez déjà attribué une nouvelle valeur à 'r'. À la première itération, vous aurez 'c = nums [1] [1] .second'. –
En outre, vous n'avez pas besoin de tout le bruit 'make_pair()'. Il suffit d'utiliser l'initialisation de l'accolade: 'std :: vector> blah {{21, 42}, {101, 404},}' (Oui, cela fonctionne également pour les 'vector's imbriqués.) –