vector实现二维数组

剑指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;
	}	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值