vector声明二维数组的一些问题

来源:互联网 发布:下载汉王识别软件 编辑:程序博客网 时间:2024/05/21 15:40

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();

该语句返回表达式结果的类型。


原创粉丝点击