vector容器
Vector:和数组是一样的,唯一不同的是 向量是不定长的,可以随着程序的运行扩大或者缩小;vector是表示可变大小数组的序列容器。
当容量不够用了,会按1.5倍或者2倍的方式去内存中寻找连续的空间出来,把存储空间中的数据拷贝到新空间中,然后把原存储空间还回给系统!
访问:
通过索引的方式访问
迭代器就是面向对象版本的指针
List—顺序容器
结构: 双向循环链表
模板类list是一个容器,list是由双向链表来实现的,每个节点存储1个元素。list支持前后两种移动方向。
优势: 任何位置执行插入和删除动作都非常快
void push_front(const T& x); // 头部添加
void push_back(const T& x); // 尾部添加
begin()和end():通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator,可以调用list容器的 end() 函数来得到list末端下一位置,相当于:int a[n]中的第n+1个位置a[n],实际上是不存在的,不能访问,经常作为循环结束判断结束条件使用
push_back() 和push_front():使用list的成员函数push_back和push_front插入一个元素到list中。其中push_back()从list的末端插入,而 push_front()实现的从list的头部插入。
front()和back(): 通过front()可以获得list容器中的头部元素,通过back()可以获得list容器的最后一个元素。
insert():在指定位置插入一个或多个元素(三个重载):
l1.insert(l1.begin(),100); 在l1的开始位置插入100。
l1.insert(l1.begin(),2,200); 在l1的开始位置插入2个100。
l1.insert(l1.begin(),l2.begin(),l2.end());在l1的开始位置插入l2的从开始到结束的所有位置的元素。
erase():删除一个元素或一个区域的元素(两个重载)
l1.erase(l1.begin()); 将l1的第一个元素删除。
l1.erase(l1.begin(),l1.end()); 将l1的从begin()到end()之间的元素删除。
map---映射---关联容器