我是C ++的新手,我正在尝试使用double for循环创建矩阵生成函数;
#include<stdio.h>
#include<vector>
#include<iostream>
#include<typeinfo>
using std::vector;
vector<int> makeMatrix(int xDim, int yDim){
vector<int> o(xDim,yDim);
for(int i=0; i<xDim; ++i){
for(int j=0; j<yDim; ++j){
o[i][j]=(i+1)*(j+1);
}
}
return o;
}
int main(int argc, char ** argv){
const int xDim= 10;
const int yDim= 10;
auto v1 = makeMatrix(xDim,yDim);
for ( int x = 0; x < xDim; x ++ ) {
for ( int y = 0; y < yDim; y++ ) {
std::cout << v1[x][y] << " ";
}
}
return 0;
}
我希望能够看到每个元素,所以我知道我在做什么,但我得到了;
error: expression must have pointer-to-object type
当我尝试访问它们时。
答案 0 :(得分:2)
vector<int> o(xDim,yDim);
创建一维向量。然后o[i][j]=(i+1)*(j+1);
尝试将其用作2d向量。由于o[i]
为您提供了int&
来电[]
,因此int
没有operator[]
。
我认为你的意思是
vector<vector<int>> o(xDim,vector<int>(yDim));
您还必须更改返回类型。那将是
vector<vector<int>> makeMatrix(int xDim, int yDim)
答案 1 :(得分:1)
vector<int> o(xDim,yDim);
创建一个int
的向量,其中包含xDim
(10)个元素,其值为yDim
(10)。
所以它看起来像这样:{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }
。
您正在尝试创建2D矢量 你可以创建一个这样的:
vector<vector<int>> o(xDim, vector<int>(yDim));