我试图将元素从2d整数矩阵(使用向量矢量创建)推送到1d整数vecto。如果我这样做,试图推回:
//declarations
//vector<vector<int>>nums
//vector<int>ans;int a
for(int i=0;i<nums.size();i++)
{
for(int j=0;j<nums[i].size();j++)
{
arr.push_back(nums[i,j]);
}
}
我收到错误,因为没有匹配的函数调用。 但是,如果我这样做:
for(int i=0;i<nums.size();i++)
{
for(int j=0;j<nums[i].size();j++)
{ a=nums[i,j];
arr.push_back(a);
}
}
有效。 据我所知,nums [] []被读作矢量,但不应该nums [i] [j]这是一个整数,可以原样读取而不会引发错误。有人可以解释这两种情况的区别吗?
答案 0 :(得分:4)
索引到二维矩阵的语法是nums[i][j]
而不是nums[i,j]
这是因为operator[]
重载对std::vector
的影响。您可以提供单个整数作为参数而不是一对,请参阅http://en.cppreference.com/w/cpp/container/vector/operator_at
表达式nums[i][j]
首先计算为((nums[i])[j])
,其中内括号计算为对i
中nums
元素的引用,其类型为vector<int>
}。然后第二个[j]
求值为对内部向量的元素的引用,即类型,(可能是const限定的)int&
答案 1 :(得分:3)
这个问题的答案并不像看起来那么简单。让我为你分解一下:
i,j
被评估为j
,因此nums[i,j]
等于nums[j]
[]
上的运算符vector<vector<int>>
返回此向量的元素类型的实例,即vector<int>
。可以通过再次使用[]
运算符来访问此内部向量的元素
因此,如果要访问2d向量中的单个元素,请先进行
必须选择外部矢量,然后选择其内部元素,即
nums[i][j]
。