变长数组

1、概念

vector是变长数组,支持随机访问,不支持在任意位置
O(1)插入,为了保证效率,元素的增删一般在末尾进行。

2.1、声明

#include<vector>	//头文件
vector<int> a;		//相当于一个长度动态变化的int数组
vector<int> b[223]; //相当于第一维长233,第二位长度动态数组变化的int数组
struct ret{...};	 
vector<ret> c;		//自定义的结构体也可以保存在vector中

2.2 size/empty

size函数返回vector的实际长度(包含的元素个数)。enpty函数返回一个bool类型,表明vector是否为空。二者的时间复杂度都是O(1)。

vector<int> b;
b.push_back(1);
b.push_back(2);
b.push_back(3);

//cout<<b.size();
cout<<b. empty();  //0:非空 1:空

2.3 clear

clear函数把vector清空。

2.4 迭代器

迭代器就像STL容器的“指针”,可以用*解除应用。一个保存int的vector的迭代器声明方法为:

vector<int>::inerator it;

vector的迭代器是“随机访问迭代器”,可以把vector的迭代器与一个整数相加减,其结果也和指针相类似,得到两个迭代器对应下标之间的距离。

vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);

vector<int>::iterator b = a.begin();
b+=2;
cout<<*b;

2.5 begin/end

begin函数返回指向vector中第一个元素的迭代器。例如a是一个非空的vector,则a.begin()与a[0]的作用相同。
所有容器都可以视作一个“前闭后开”的结构,end函数返回vector的尾部,即第n个元素再往后的“边界”。
a.eng()与a[n]都是越界访问,其中n = a.size()。
下面两份代码都遍历了vector a,并输出它的所有元素。

for(int i = 0;i < a.size;i ++)
	cout<<a[i]<<endl;
	for(vector<int>::iterator it = a.begin(); it != a.end(); it ++)
	cout<<*it<<endl;

2.6 front/back

front函数返回vector的第一个元素,等价于a.begin()和a[0];
back函数返回vector的最后一个元素,等价于
--a.end()和a[a.size()-1]。

2.7 push_back 和pop_back

a.push_back(x)把元素x插入到vector的尾部。
b.pop_back()删除vector的最后一个元素。

posted @ 2025-04-11 20:58  yanxinyi123  阅读(15)  评论(0)    收藏  举报