2017-06-20 3 views
-1

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 whilec = nums[r][c].second; elle renvoie -1 au lieu de 2.

+1

À ce stade, vous avez déjà attribué une nouvelle valeur à 'r'. À la première itération, vous aurez 'c = nums [1] [1] .second'. –

+0

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.) –

Répondre

1

En première itération,

r=num[0][1].first = 1. 

Par conséquent

c=num[1][1].second = - 1. 
+0

peut fermer la question, car il ne sera pas beaucoup d'aide à la communauté. Rien de productif cependant! –