从2d到1d向量推送元素

时间:2017-07-03 04:16:01

标签: c++ c++11 vector

我试图将元素从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]这是一个整数,可以原样读取而不会引发错误。有人可以解释这两种情况的区别吗?

2 个答案:

答案 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]),其中内括号计算为对inums元素的引用,其类型为vector<int> }。然后第二个[j]求值为对内部向量的元素的引用,即类型,(可能是const限定的)int&

答案 1 :(得分:3)

这个问题的答案并不像看起来那么简单。让我为你分解一下:

  • 在代码中使用逗号时要小心! C ++有自己的comma operator规则,这意味着i,j被评估为j,因此nums[i,j]等于nums[j]
  • []上的运算符vector<vector<int>>返回此向量的元素类型的实例,即vector<int>。可以通过再次使用[]运算符来访问此内部向量的元素 因此,如果要访问2d向量中的单个元素,请先进行 必须选择外部矢量,然后选择其内部元素,即 nums[i][j]
    C ++没有特殊的访问语法 多维数组/载体!