STL
vector
为了方便,本页面所有演示类型均为int
构造函数
vector<int> v1; //创建一个空容器
vector<int> v2(n); //创建一个长度为n的容器,所有元素默认为0
vector<int> v3(n,value); //创建一个长度为n的容器,所有元素默认为value
vector<int> v4(start,end); //(start和end为int*)创建一个容器,将start到end之间的内存复制给容器(左闭右开)
vector<int> v5(v4); //创建一个容器,其内容是v4的复制
vector<int> v6={1,2,3,4,5}; //类似数组初始化
赋值(vector
支持下标访问,也支持迭代器访问)
vector<inr> v1={1,2,3},v2={4,5,6},v3; //演示用
v3.assign(n,value); //清空容器,让将n个value写入容器
v3.assign(v1.begin(),v1.end()); //清空容器,将v1的部分(这里是全部)复制到v3(参数是指针,左闭右开)
v3=v1; //将v1复制给v3(重载=)
v1.swap(v2); //交换v1和v2
大小和判断
vector.size();//返回容器长度
vector.empty();//判断容器是否为空
vector.resize(n);//将容器长度设定为n,若容器边长则填充默认值,容器变小则丢弃多余值
vector.resize(n,value);//将容器长度设定为n,若容器边长则填充value,容器变小则丢弃多余值
vector.clear();//清空容器
访问、遍历
vector
虽然支持下标访问,但不推荐,更推荐迭代器访问
vector[n]; //直接下标访问,不推荐,越界访问编译不报错程序会卡死
vector.at(n); //vector内部at方法,返回下标为n的数据,越界访问编译报错
for(vector<int>::iterator it=vector.begin();it!=vector.end();it++){ //迭代器
cout<<*it;
}
插入、删除、赋值
vector.push_back(value);//在末尾插入value
vector.pop_back();//从末尾弹出一个元素,返回这个元素
vector.erase(pos);//删除pos位置的元素,返回指向pos位置的迭代器
vectot.insert(pos,value);//在pos位置插入一个value,返回新数据的位置(迭代器)
vectot.insert(pos,n,value);//在pos位置插入n个value,无返回值
vectot.insert(pos,begin,end);//在pos位置插入[begin,end)间的数据,无返回值
vector
中的迭代器
成员函数 | 功能(vecror<int> v={1,2,3,4} ) |
---|---|
begin() |
返回容器第一个元素的正向迭代器(指向v[0] ) |
end() |
返回容器最后一个元素之后一个位置的正向迭代器(指向v[4] ) |
rbegin() |
返回容器最后一个元素的反向迭代器(指向v[3] ) |
rend() |
返回容器第一个元素之前一个位置的反向迭代器(指向v[-1] ) |
vector
中迭代器的失效
vector
在进行扩容等内存移动的操作时,之前声明的迭代器会失效(成为野指针),需要重新赋值
使用insert(pos,value)
函数触发扩容时会返回新vector
中pos
位置的迭代器,可以使用it=v.insert(n,value);
来直接刷新迭代器`
deque
deque
容器与vector
容器相比只多了两个成员方法,其他的与vector
容器用法相同,跳转
头部插入与弹出
deque.push_front(value);//载体u不插入value
deque.pop_front();//删除头部的一个元素,返回这个元素
list
list是一个双向链表
构造
list<int> l1; //构造一个空链表
list<int> l2(5); //构造一个长度为5的空链表,默认元素为0(int情况下)
list<int> l3(5,9); //构造一个长度为5的空链表,全部元素为9
list<int> l4={1,2,3,4,5}; //构造一个长度为5的空链表,元素为1,2,3,4,5
list<int> l5(l4); //创建一个容器,其内容是l4的复制
插入、弹出、赋值
list.push_front(0); //头插
list.push_back(6); //尾插
list.pop_front(); //头部删除
list.pop_back(); //尾部删除
访问
list.front(); //返回容器的第一个元素
list.back(); //返回容器最后一个元素
front()
和back()
函数同样可以用来给容器首尾赋值
list.front()=1; //将容器的第一个元素赋值为1
list.back()=2; //将容器最后一个元素赋值为2
迭代器
list
不支持下标访问,且其迭代器不可以进行常量偏移(例如:it+5
),但支持自增自减(例如it++
)
list
的迭代器为双向迭代器
成员函数 | 功能(list<int> v={1,2,3,4} ) |
---|---|
begin() |
返回容器第一个元素的正向迭代器(指向v[0] ) |
end() |
返回容器最后一个元素之后一个位置的正向迭代器(指向v[4] ) |
rbegin() |
返回容器最后一个元素的反向迭代器(指向v[3] ) |
rend() |
返回容器第一个元素之前一个位置的反向迭代器(指向v[-1] ) |