2017-06-20 90 views
-1

我遇到了一个我无法解释原因的情况。我有一个vector<vector<pair<int, int> > > parent,指示特定单元格的parent。我有以下代码:遍历向量<向量<对<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; 
    } 

为什么while循环为c = nums[r][c].second;第一次迭代返回-1而不是2

+1

到那时,您已经为'r'指定了一个新值。在第一次迭代中,您将拥有'c = nums [1] [1] .second'。 –

+0

另外,你不需要所有'make_pair()'噪声。只需使用大括号初始化:'std :: vector > blah {{21,42},{101,404},}'(是的,它也适用于嵌套的'vector's。) –

回答

1

在第一次迭代I不敢肯定,

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

因此,

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

可能会关闭这个问题,因为它对社区不会有太大的帮助。虽然没有生产力! –

相关问题