vector实现二维数组

来源:互联网 发布:yii 框架商城源码下载 编辑:程序博客网 时间:2024/05/17 01:15

剑指offer第一个题就是二维数组的查找,天真地想用二维数组做,结果点开人家的在线编程,给的是vector。[尴尬......]

用vector实现二维数组的好处:

1、数组的越界可能会引起程序的崩溃,动态性不好,包括动态改变大小,动态申请。

2、vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小。

简单说下C++构建动态的二维数组:

int **p;p = new int*[10];    //注意,int*[10]表示一个有10个元素的指针数组for (int i = 0; i < 10; ++i){    p[i] = new int[5];}

用vector实现二维数组:
一、定义一个二维数组并初始化:

vector<vector<int> > array(m); //这个m一定不能少//初始化一个m*n的二维数组for(int i=0;i<m;i++) 
{    array[i].resize(n);}
二、下面的代码将实现:

产生二维数组,

给二维数组赋值,

扩大原有的二维数组,

数组下标进行访问,

迭代器进行访问。

#include<vector>#include<iostream>using namespace std;int main(){vector<int> vc;vc.push_back(1);vc.push_back(2);vc.push_back(3);int count = 0;////////////////二维数组////////////////////////////////vector<vector<int>> sz(3);for(int i=0;i<3;i++)sz[i].resize(4);//创建了一个3*4的二维数组//(利用下标)类似二维数组//////////////////////for(int i=0;i<3;++i)for(int j=0;j<4;++j)sz[i][j] = ++count;for(int i=0;i<3;++i){for(int j=0;j<4;++j)    {cout<<sz[i][j]<<"  ";}cout<<endl;}cout<<endl;//动态扩大了二位数字的大小////////////////////////////////////////////////这是在原有的基础上再开的并不会把之前的清空////////sz.resize(5);//重新设置了大小为5//////////////////////////////////////////////////////////////sz[3].resize(4);sz[4].resize(4);//这两句相当于是初始化新开的两个空间。////////////这两句不写的话代码会出现内存错误,并崩溃掉////////for(int i=0;i<5;++i){for(int j=0;j<4;++j)    {cout<<sz[i][j]<<"  ";}cout<<endl;}//(利用迭代器)类似指针/////////////////////////////////////////vector<int>::iterator it;//===========>相当于列vector<vector<int>>::iterator iter;//=>相当于行vector<int> vec_tmp;cout<<"Use iterator:"<<endl;for(iter = sz.begin();iter != sz.end();iter++){vec_tmp = *iter;for(it = vec_tmp.begin();it!=vec_tmp.end();it++)cout<<*it<<"  ";cout<<endl;}}




0 0
原创粉丝点击