vector
“变长数组”——长度根据需要而自动改变
1、头文件
#include<vector>
using namespace std;
2、定义
vector<int>v;
vector<int>v[manx];//v[0]~v[manx-1]中的每一个都是一个容器
vector<vector<int> >vt;//>>之间要加空格//可以当做两个维都可以变长的数组
//类型名也可以是int、double、char,或者STL标准容器:vector、queue等
3、访问
(1)下标访问,和普通以为数组一样………………v[i]
(2)通过迭代器访问…………………………………………………*it
定义it:vector<int>::iterator it;
4、常用函数(见表格)
5、示例(见代码)
6、用途:
(1)储存数据(元素个数不确定时可以很好地节省空间)
(2)实现邻接表存图
基本操作 | 复杂度 | |
---|---|---|
begin() | 返回第一个元素的迭代器 | O(1) |
end() | 返回最末元素的下一个位置的迭代器 | O(1) |
push_back() | push_back(x)就是在vector后面添加一个元素x | O(1) |
pop_back() | 删除最后一个元素 | O(1) |
size() | 返回vector中的元素数量的大小 | O(1) |
clear() | 清空所有元素 | O(N) |
insert() | insert(it,x)用来向任意迭代器it出插入一个元素x | O(N) |
erase() | erase(it)删除迭代器为it的元素 | O(N) |
erase(frist,last)即删除[frist,last)内的所有元素 | O(N) |
// v[i]和*(v.begin()+i)是等价的
其他 | |
---|---|
front() | 返回第一个元素 |
back() | 返回最末一个元素 |
empty() | 判断Vector是否为空(返回true时为空) |
swap() | 交换两个Vector |
#include<algorithm>
#include<stdio.h>
#include <iostream>
#include<vector>
using namespace std;
vector<int>v;
int main()
{
int a;
printf("输入:");
for(int i=1;i<=9;i++)
{
scanf("%d",&a);
v.push_back(a);
}
v.pop_back();
sort(v.begin(),v.end());
printf("输出:");
for(int i=0;i<(int)v.size();i++)
{
printf("%d ",v[i]);
}
cout<<endl;
}
补充:
vector与deque不同,其内存占用空间只会增长,不会减小。比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有空间在vector析构时回收。
empty()是用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),所占用的内存空间依然如故。