vector是一个c++模板标准库,它是一个可以指定数据元素的顺序表。
需要引用头文件vector
00:
默认以vector<int>举例
以下为我在后文测试过程中使用的非库函数。
001:print
void print(vector<int>m)
{
for (vector<int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
01: 初始化
001: vector<int>m;
初始化一个空表
002:vector<int>m={0,1,2,3,4,5};
表中有六个元素0,1,2,3,4,5
003:vector<int>m2=m1;
其中m1为以初始化的顺序表,m1类型需与m2相同
注意
可以看出通过顺序表来初始化顺序表时,不是c风格的地址拷贝,而是而是通过赋值新建一个顺序表
004:vector<int>m(int num,int value)
此时m中有num个value元素。
005:vector<int>m(vector<int>::iterator begin,vector<int>::iterator end)
从begin开始,把begin到end中的元素拷贝到m中,不包括end指向的元素
测试:
02:赋值
严格的说,c/c++中初始化与赋值并不相同,二者存在细微差异。
001:m={1,2,3,4,5};
给m赋值为{1,2,3,4,5}
002:m2=m1;
给m2赋值为m1中的值。
003:m.assign(int num,int value);
给m3赋值为num个value。
004:m.assign(vector<int>::iterator begin,vector<int>::iterator end)
从begin开始,把begin到end中的元素拷贝到m中,不包括end指向的元素
测试:
03: 增删查改
001:增加元素
0001:push_back()尾插
m.push_back(int value);
向顺序表末尾插入value
因为vector<int>类型的m是顺序表,所以尾插一定是效率最高的插入方式
0002:inster()指定位置插入
m.inster(bector::iterator it,int value)
向it下标插入value元素,其余的的可以理解都成往后退一位。
m.inster(bector::iterator it,vector<int>::iterator begin,vector<int>::iterator end)
把begin到end的元素拷贝到it之前
002:删除元素
0001:尾删
m.pop_back()
删除末尾元素。
效率最高的删除方式
0002:指定位置删除
m.erase(vector<int>::iterator begin,vector<int>::iterator end)
把从begin到end的元素删除,不包括end执行的元素。
0003:清空顺序表
m.clear()
删除整个顺序表
003:查找元素
find(vector<int>::iterator begin,vector<int>::iterator end,int targe)
从begin开始找targe,会返回一个迭代器,指向目标元素,没找到的话会指向end
004: 修改元素
m1.at(int num)=x;
m1[num]=x;
以上两种操作均可把m1种num下标的元素改为x
测试
04:其他常用函数
有的需要头文件algorithm
- begin 活动顺序表开头的迭代器
- capacity 获取当前顺序表的容量
- copy 拷贝元素
- reserve 修改容量,只能让容量变大
- end 获取顺序表末尾元素的下一个元素的迭代器,该值不为有效值
- size 获取当前顺序表有效元素个数
- sort 排序
- swap 交换
05:修改容量,使变小
当有效元素个数远小于容量是,会有内存浪费。
举例
可以使用匿名顺序表重写初始化在交换值进行修改容量
代码:vector<int>(m).swap(m);
感谢观看!!!