【发布时间】:2017-06-20 15:23:05
【问题描述】:
我遇到了一个我无法解释原因的情况。我有一个vector<vector<pair<int, int> > > parent,表示特定单元格的parent。我有以下代码:
// (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。
【问题讨论】:
-
此时,您已经为
r分配了一个新值。在第一次迭代中,您将拥有c = nums[1][1].second。 -
另外,您不需要所有的
make_pair()噪音。只需使用大括号初始化:std::vector< std::pair<int, int> > blah{ {21, 42}, {101, 404}, }(是的,它也适用于嵌套的vectors。)