vector容器
1.要开vector库
2.vector<T> 是动态的连续数组,可以列表初始化
vector<int> ivec(10, 2); //创建10个值为2的元素
3.可以靠[ ]、at(int)、front、back、迭代器访问其中元素,其中at会自动检查下标越界,抛出异常
4.迭代器
vector<int>::iterator iter; // 声明正向迭代器对象(+1向右)
vector<int>::reverse_iterator riter; // 声明反向迭代器对象(+1向左)
begin()指向首位,end指向末位后一个位置,rbegin()指向末位(对反向来说是首位),rend指向首位前一个位置(对反向来说是末位后一个)
auto和decltype
灵活使用 auto 和 decltype 可以减少程序对模板实参的依赖,提升程序通用性和可读性
例如 auto iter=ivec.begin() 或 decltype(ivec.begin()) iter;(声明从表达式推导得到的类型)
用迭代器遍历元素
5.元素插入
c.insert(iter, t) 在iter所指之前插入元素t
c.insert(iter, n, t) 在iter所指之前插入n个元素t
c.push_back(t) 在尾端插入元素t
c.push_front(t) 在首端插入元素t //vector没提供front
6.元素删除
c.clear() 删除所有
c.erase(iter) 删除某位,并返回下一位常迭代器
c.erase(b, e) 删除b~e的前一位,并返回下一位(e)常迭代器
c.pop_back() 删除末位
c.pop_front() 删除首位 //vector没提供front
7.容量操作
c.empty() 若为空,返回true,否则false
c.size() 返回元素个数
c.resize(n) 将容器大小调为可放n个,多退少补
c.resize(n, t) 补的话新增元素取值为t,其余效果相同
8.赋值和交换
c1 = c2
c.assign(n, t) 先删除c中所有,然后在c中存放n个值为t的元素
c1.swap(c2)