C++ STL Vector常用方法详解

6.1 vector的常见用法详解

​ vector数组 称为长度根据需要而自动改变的数组。要使用vector,需要添加头文件#include

1.vector的定义

vector<typename> name;

​ 其中typename可以是任何基本类型,例如int、double、char、结构体等,也可以是STL标准容器,例如vector、set、queue等

2.vector容器内元素的访问

(1). 通过下表访问

vector<typename> vi;

​ 直接访问vi[index]即可(如vi[0]、vi[1]…),区间是[0, vi.size()-1]

(2). 通过迭代器访问

迭代器(interator)可以理解为一种类似指针的东西,其定义是:

vecotr<typename>::interator it;

		这样it就得到了迭代器it, 并且可以通过*it来访问vector里的元素, 看一段实例代码:
	#include <bits/stdc++.h>
	#include <vector>
	using namespace std;
	int main(){
		vector<int> v;
		for(int i = 0; i < 5; i++){
			v.push_back(i);
		}
		for(int i = 0; i < 5; i++){
			cout<<v[i]<<' ';
		}
		cout<<endl;
		/*vector<int>::iterator it = v.begin();
		for(int i = 0; i < 5; i++){
			cout<<*(it + i)<<' ';
		}*/
		for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
			cout<<(*it)<<' ';
		}
		return 0;
	}
	输出结果:

			0 1 2 3 4

		    0 1 2 3 4

注:在常用的STL容器中,只有在vector和string中,才允许用v.begin()+3这种迭代器加上整数的写法

3.vector常用函数实例解析

(1). push_back(x) 就是在vector后面添加一个元素
(2). pop_back() 用以删除vector的尾元素
(3). size() 用来获得vector中元素的个数
(4). clear() 用来清空vector中的所有元素
(5). insert(it, x) 用来想vector的任意迭代器it出插入一个元素x
(6). erase() 两种用法:删除单个元素、删除一个区间内的所有元素

1. erase(it) 即删除迭代器为it处的元素

2. erase(first, last) 即删除[first, last)内的所有元素

4. vector的常见用途

(1). 储存数据
vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间
有些场合输出数据的个数是不确定的,为了方便地处理最后一个满足条件不输出额外的空格,可以先用vector记录所有需要输出的数据,然后一次性输出
(2). 用邻接表存储图
// 4、vector动态数组
#include <bits/stdc++.h>
#include <vector>
using namespace std;

struct node{
	int x;
	int y;
	node(int x, int y){
		this->x = x;
		this->y = y;
	}
};

int main(){
	vector<int> s;
	s.push_back(1);
	s.push_back(2);
	s.push_back(3);			//在vector数组后面添加一个元素 
	cout<<s.size()<<endl;	//获得vector中元素的个数
	s.pop_back();			//删除vector的尾元素 
	for(int i = 0; i < s.size(); i++){
		cout<<s[i]<<' ';
	}
	cout<<endl;
	
	vector<int> ss[10];
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < 5; j++){
			ss[i].push_back(i*j);
		}
	}
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < ss[i].size(); j++){
			cout<<ss[i][j]<<' ';
		}
		cout<<endl;
	}
	
	vector<node> v[10];
	for(int i = 0; i < 5; i++){
		int a = i+1, b = i+2, c = i+3;
		v[a].push_back(node(b, c));
	}
	
	for(int i = 0; i < 5+1; i++){
		cout<<v[i].size()<<endl;
		for(int j = 0; j < v[i].size(); j++){
			cout<<v[i][j].x<<' '<<v[i][j].y<<endl;
		}
	}
	return 0;
}

3
1 2
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
0 4 8 12 16
0
1
2 3
1
3 4
1
4 5
1
5 6
1
6 7

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚蓝不远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值