文章目录
一、vector容器
1.vector介绍
vector向量容器是以类模板的形式提供的动态数组,与数组相似,vector的元素也存储在连续的空间中,支持使用下标访问元素,与数组不同的是,vector容器的大小可以动态改变,存储空间及分配由容器自己完成。
2.定义初始化
需引入头文件< vector >
vector<int> v1; //定义一个int类型的空vevtor
vector<char> v2; //定义一个char类型的空vector
vector<ClassName>; //定义一个xxx类的空vector
vector<int> v3(10) // 定义一个包含10个int元素的vector
vector<int> v4(10,1) //定义一个包含10个int元素的vector 初始值为1
string str[] = {"KB","LB","JB"};
vector<string> v1(str,str+2); //定义一个包含两个string元素的vector
vector<string> v2(v1); //Vector可以用对象直接赋值
3.vector常用的函数
vector<int> v1; //定义一个类型为int 的空vector
v1.begin(); // 返回vector头元素的指针
v1.end(); // 返回vector尾元素的指针
v1.rbegin(); // 指向向量中最后一个元素
v1.rend(); //指向向量中第一个元素
v1.push_back(1); //往末尾添加
vector<int>::iterator it = v1.begin();//迭代器并指向第一个元素
for (; it < v1.end(); it++) //遍历容器元素
cout << *it << endl;
v1.pop_back(); //删除最后一个元素
v1.clear(); //清空向量
v1.at(0); //类似数组下标访问
v1.size(); //获取向量里有几个元素
v1.empty(); //判断向量是否为空
v1.assign(1, 3); //修改向量中第1个元素为3
4.遍历向量
通过迭代器来遍历整个向量
vector<int>::iterator it = v1.begin();//迭代器并指向第一个元素
for (; it < v1.end(); it++) //遍历容器元素
cout << *it << endl;
二、std::array容器
1.std::array介绍
std::array是在C++11中才引入的,与内置数组相比,array是一种更安全、更容易使用的数组类型。与内置数组类似,array对象的大小是固定的。因此,array不支持添加和删除元素以及改变容器大小的操作。除了有传统数组支持随机访问、效率高、存储大小固定等特点外,还支持迭代器访问、获取容量、获得原始指针等高级功能。
2.定义初始化
需引入头文件 < array>
array<int , 5> a1; //定义一个长度为5的array 但是没有初始化值为随机值
array<int, 5> a2 = { 1,2,3,4,5 }; //定义一个长度为5的array 并初始化
array<int, 5> a3(a2); //array也是可以向向量一样传对象的
3.array常用函数
array<int, 5> a2 = { 1,2,3,4,5 }; //定义一个长度为5的array 并初始化
a2.begin(); //array中的第一个元素
a2.end(); //array中的最后一个元素
a2.data(); //返回首地址
a2.empty(); //判断array是否有元素
a2.at(0); //类似数组访问
4.遍历array
for (int i = 0; i < a2.size(); i++)
cout << a2.at(i);
三、list容器
1.list介绍
list链表容器是对双向链表的一个泛化实现,是通过指针将存储在不同位置的元素连接起来所构成的一个线性序列,双向链表的每个节点都有分别指向前驱和后驱节点的指针,所以在list中可以非常方便地向前向后去遍历容器
2.定义及初始化
需引入头文件< list>
list<int> list1; //创建一个int类型的list对象
list<int> list2(5); //创建一个含有5个int元素的list
list<int>list3(3,2); //创建含有3个元素的list,且元素为2
list<int>list4(lst2); //使用也可以通过传对象进行赋值
3.list常用函数
list1.back() //返回最后一个元素
list1.begin() //返回指向第一个元素的迭代器
list1.clear() //删除所有元素
list1.empty() //如果list是空的则返回true
list1.end() //返回末尾的迭代器
list1.erase() //删除一个元素
list1.front() //返回第一个元素
list1.pop_back() //删除最后一个元素
list1.pop_front() //删除第一个元素
list1.push_back() //在list的末尾添加一个元素
list1.push_front() //在list的头部添加一个元素
list1.rbegin() //返回指向第一个元素的逆向迭代器
list1.remove() //从list删除元素
list1.remove_if() //按指定条件删除元素
list1.size() //返回list中的元素个数
list1.sort() //给list排序
list1.unique() //删除list中重复的元素
4.遍历list
list<int>::iterator it = list1.begin();
for (it = list1.begin(); it != list1.end(); it++)
cout << *it << endl;
四、vector、array、list的区别
1.vector与array的区别
相同点:
(1)、vector与array 内存都是连续的
(2)、vector与array 与数组相似都可以使用下标访问
(3)、vector与array 的安全性比较高,避免越界
不同点:
(1)、vector的存储空间是动态的,但是array的存储空间是固定的
(2)、vector的数据存在堆区,而array的数据存在栈区
(3)、vector可以动态插入,但是array不行
2.vector与list的区别
(1)、vector的内存空间是连续的,list的内存空间不连续
(2)、vector可以随机存取,list随机存取效率低
(3)、vector内存不够是会主动开辟新空间,而list不需要,所以list的开销会比较小
(4)、当向vector插入或者删除一个元素时,需要复制移动待插入元素右边的所有元素;因此在有频繁插入删除操作时,使用list更加合适。