vector实现二维数组结构时时,常用的做法有一下几个:
vector<int> studentNums; //声明一个一维的int类型向量
vector<int> studentNums(7);//声明一个元素个数为7的,初始化为0的int类型向量
vector<int> studentNums(7,1);//声明一个元素个数为7的,初始化为1的int类型向量
上面是一维数组结构的声明方式,但是当声明二维数组时,就有些小细节需要注意了。正常情况下声明如下:
vector<vector<int> >studentNums;
这种形式声明的二维数组在进行访问的时候会出现如下问题:
for(int i=0;i<studentNums.size();i++)
{
for(int j=0;j<studentNums[0].size();j++)
{
cout<<i<<" "<<j<<endl;
studentNums[ (i*n+j)/c ].push_back(nums[i][j]);
}
}
会出现内存溢出的情况。
当声明为
vector<vector<int> >studentNums(x);//x为函数外部输入的量
内存溢出的问题就没有了。
也就是说声明二维数组时候,行数是必须要初始化的。这一点切记。
另外也查阅了一下studentNums.size()这个函数返回值类型。大部分情况下都为unsigned int
如果不确定,可以用typeid( ).name()这个函数来查询。用法如下:
typeid( 表达式 ).name();
该语句返回表达式结果的类型。