vector使用

vector简单使用

之前总结过一个关于vector使用的文章,结果发现使用的时候还是会出错,那就再简单整理一下吧.

一维向量定义

毕竟,vector就是大小可变的数组.一维的情况还是很简单的,
但是,我今天掉坑就掉在了这个上面.
看一下代码吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(){
	int n;
	cin >> n;
	vector<int> v(n);
	for (int i = 0; i < n; i++){
		int temp;
		cin >> temp;
		//v[i] = temp;
		v.push_back(temp);
	}
	for (int i = 0; i < v.size(); i++){
		cout << v[i] << " ";
	}
	return 0;
}

这样写了之后,运行出来是出问题的.
打印出来发现里面多了3个0
多出了三个0.
怎么看代码也没问题,写成绿色注释的那句就对了…很奇怪..

最后发现了,因为定义vector的时候,后面加了(n),去掉就可以了..

那么,定义vector的时候带括号与不带括号有什么区别呢??原来:

1
2
3
vector<int> v;  	//这是定义一个int型向量
vector<int> v(n)	//这是定义初始大小为n的向量
vector<int> v(n,1)  //这是定义初始大小为n,初始值为1的向量

这样一来就对了,之前定义的是有初始大小的向量.如果再用push_back()的话,他是追加,所以写入的时候会在后面继续增加容量.

二维向量定义

上面那些还要和二维向量的定义区别开:
vector可以嵌套定义

1
vector<vector<int> >v;//这样就嵌套定义了,他可以嵌套本身,不过注意后面两个>中间有个空格

最重要的是下面这个定义,这个定义千万别和带括号的弄混了

1
2
vector<int> v[5];
//这样是定义了二维数组,但是一维长度已经固定,另一维才是可变的.

做题又遇到一种定义:

1
vector< vector<int> > v(m, vector<int>(n) );

定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。

每部分解析:   

  • 构造函数vector(size_type n, const allocator_type& alloc = allocator_type())表示构造一个使用alloc分配内存(如果是初学,不用管这个,使用默认的就好)的含n个元素的vector,其中每个元素执行值初始化(对于内置类型即初始化为0)。因此vector(n)表示构造一个无名且含n个0的vector对象。

  

  • 构造函数vector(size_type n, const value_type& val, const allocator_type& alloc = allocator_type())表示构造一个使用alloc分配内存的含n个元素的vector,其中每个元素是val的一个拷贝。因此整条语句的含义如第一段所说。

  

  • 从结果上看,类似于创建了一个m×n的二维数组,而且可以通过v[i][j]的方式来访问元素(vector支持下标访问元素)。

此处参考:csdn

vector元素访问

两种方式:
(1)下标访问
(2)迭代器访问

通过下标访问和数组是一样的,不再赘述.
简单介绍一下通过迭代器访问,全都以int为例.

1
vector<int>::iterator it;//定义vector<int>::iterator类型的 it;

这样就得到了迭代器it,使用*it就可以操作vector元素了,很简单吧.

1
2
3
for(int i = 0;i < 3;i++){
	printf("%d ",*(it+i));//输出元素
}

好了,介绍完迭代器用法,开始看函数.

vector常用函数

1.push_back()
最常用的就是push_back()吧,哈哈,我是最常用它,其他人我就不知道咯,他是向vector后面加入元素,每加一次都是会增加capacity的.这也是上面我出错的原因.

2.pop_back()
看看1就知道2了吧,一个增加一个删除了.这个是删除vector的尾元素.但是!!!使用pop_back(),删除元素之后capacity竟然不减少.也就是说,vector原来是多大,使用pop_back()之后还是多大,还是占用空间的.
3.size()
获得vector中元素的个数.so easy;

4.clear()
看名字就知道是清空vector所有元素了吧.
验证了一下,清空也是不改变capacity的.

5.insert(it,x)
插入元素,在it处插入,需要注意的:是插入不是人替代,插入之后,元素后移,那个说来,也是会开辟元素空间咯…

6.erase()函数
erase()函数两种用法:(1)删除单个元素. (2)删除区间元素
不介绍了,感觉很简单啊,无非是一个参数还是两个参数的问题.一个参数就是单个元素,两个参数就是区间首尾.

参考<<算法笔记>>.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值