c++ vector、List、deque资料整理

本文详细介绍了C++ STL中的顺序容器vector、list和deque,包括它们的初始化、成员函数、迭代器使用,以及查找、删除元素的方法。vector作为动态数组,提供高效随机访问,但插入删除较慢;list采用链表结构,插入删除快速但访问效率低;deque结合了vector和list的优点,支持随机访问和高效首尾插入删除。此外,还讨论了常量容器、capacity与size的区别以及迭代器的使用。
摘要由CSDN通过智能技术生成

顺序容器 vector介绍

vector是C++STL库中表示数组大小可以改变的序列容器,使用连续的存储位置来存储元素,这意味着也可以使用只想元素的常规指针上的偏移量来访问元素(eg:a[i]),与数组不同的是,vector的大小可以动态变化,存储用容器来自动处理。

vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.

在内部,vector使用动态分配的数组来存储它们的元素。这个数组可能需要重新分配,以便在插入新元素时增大大小,这意味着分配一个新数组并将所有元素移到该数组中。就处理时间而言,这是一项相对昂贵的任务,因此,vector不会在每次将元素添加到容器时重新分配。

相反,vector可以分配一些额外的存储以适应可能的增长,因此该容器的实际容量可能大于严格需要容纳其元素的存储容量(即其大小)。库可以实现不同的增长策略,以平衡内存使用和重新分配,但在任何情况下,重新分配只能以大小的对数增长间隔进行,以便在向量末尾插入单个元素时可以提供分摊的恒定时间复杂度。

因此,与阵列相比,向量消耗更多的内存,以换取高效地管理存储和动态增长的能力。

与其他动态序列容器(deques、list和forward\ u list)相比,vector非常有效地访问其元素(就像数组一样),并且相对有效地从其末端添加或删除元素。对于涉及在末端以外的位置插入或删除元素的操作,它们的性能比其他的容器差。

vector使用

使用vector,需在头文件中定义

#include <vector>
using namespace std; // vector属于std命名空间

vector初始化

vector<int> vec; 
vector<int> vec(n); //大小为n的vector
vector<int> vec(n, x);  // x个n
vector<int> b(vec); // 开一个vector名字为b的数组,并把vec的值复制给b
vector<int> b(vec.begin(), vec.end()); // 开一个vector名字为b的数组,并把vec的值复制给b
vector<int> b(&vec[0], &vec[1]);   // 开一个vector名字为b的数组,并把vec[0], vec[1],的值复制给b

vector成员函数

a[i];  //直接访问a中第i个元素
a.at(i);  // 得到编号位置的数据,直接访问a中第i个元素
a.empty();  //判断是否为空,是则返回true,否则返回false
a.size();  //返回a中的所存储元素的数量
a.push_back(x);  //将x压入a的末尾
a.pop_back();  //将a的末尾元素出栈(返回值为void类型)
a.front();  //返回第一个元素, 得到数组头的引用
a.back(); //  得到数组的最后一个单元的引用
a.clear();  //清除a中所有的元素
a.insert(it,x);  //在it前添加x
a.insert(it,n,x);  //在it前添加n个x
a.max_size();  //返回vector的最大容量
a.capacity();  //返回a所能容纳的最大元素值
a.erase(it);  //删除it这个迭代器所指向的值
a.erase(first,last);  //删除从[first,last)的值
a.resize(n);  //改变长度,超过的话则删除多余部分,少的话则增添默认值
a.resize(n,x);  //同上,默认值改为x
a.clear();  //删除所有的元素
a.assign(first,last);  //a中替换first,last,first到last这个区间的值不能为a
a.begin(); //  得到数组头的指针
a.end(); //  得到数组的最后一个单元+1的指针
a.rbegin(); // 将vector反转后的开始指针返回(其实就是原来的end-1)
a.rend(); // 将vector反转构的结束指针返回(其实就是原来的begin-1)
a.swap(); //与另一个vector交换数据

vector的迭代器

vector<int>::iterator it1;  //正向迭代器
vector<int>::reverse_iterator it2;  //反向迭代器
a.begin();  a.end();  //正向迭代器所用
a.rbegin();  a.rend();  //反向迭代器所用,rbegin()相当于end()-1,rend()相当于begin()+1
reverse(a.begin(),a.end());  //将a翻转
sort(a.begin(),a.end(),cmp);  //排序,cmp处可以不写,默认为正向,也可以自己写排序的函数,默认有less<int>()和greater<int>()



vector查找指定元素并删除

查找时可以使用find函数,此时必须将algorithm头文件包含进去。
查找完成后,如果vector中包含该元素,则返回第一个元素,或者超出末端的下一个位置,返回的是迭代器。
删除元素之前,必须确保返回的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值