STL常用容器用法大全


前言

整合总结一下C++的STL库中常用的一些容器


一、vector:向量

  变长数组,单端数组,要包含头文件vector

  1. 构造函数
vector<T> v ;默认构造函数,空的
vector<T> v(20);初始化20个空间,初始值全0
vector<T> v(n,elem);用elem初始化n个空间
vector<T> v(a.begin(),a.end());将a的起始迭代器和中止迭代器之间的内容当v的初始值(包含起始迭代器,不包含终止迭代器)
vector<T> v(a);拷贝构造
  1. 成员函数

a.赋值

assign(n,elem)将n个elem赋值
assign(beg,end)将[beg,end)之间的元素拷贝赋值(迭代器)
重载等号运算符vector& operator=(const vector &vec)——v1=v2;

b.访问

at(int idx)返回索引idx指向的数据
重载运算符 operator[]——像数组一样访问
front()返回第一个元素的引用
back()返回最后一个元素的引用

c.属性

size()返回容器中元素个数
empty()判断容器是否为空
capacity()返回容器容量
resize(int num)改变容量为num

d.迭代器函数

begin()返回第一个元素的迭代器
end()返回最后一个元素后一个位置的迭代器
rbegin()返回最后一个元素的逆序迭代器
rend()返回第一个元素的前一个位置的逆序迭代器

e.操作

push_back(a)把a加入最后
pop_back()删除最后一个元素
insert(pos,a)向pos迭代器指向的位置插入a
insert(pos,a,elem)向pos迭代器指向的位置插入a个elem
erase(pos)删除pos指向的元素
erase(sta,pos)删除迭代器sta到pos的元素
clear()清空元素
swap(vec)实现于vec容器的交换

二、deque:双端数组

双端数组,头文件deque

  1. 构造函数
deque<T> v ;默认构造函数,空的
deque<T> v(20);初始化20个空间,初始值全0
deque<T> v(n,elem);用elem初始化n个空间
deque<T> v(a.begin(),a.end());将a的起始迭代器和中止迭代器之间的内容当v的初始值(包含起始迭代器,不包含终止迭代器)
deque<T> v(a);拷贝构造
  1. 成员函数

a.赋值

assign(n,elem)将n个elem赋值
assign(beg,end)将[beg,end)之间的元素拷贝赋值(迭代器)
重载等号运算符operator=

b.访问

at(int idx)返回索引idx指向的数据
重载运算符 operator[]——像数组一样访问
front()返回第一个元素的引用
back()返回最后一个元素的引用

c.属性

size()返回容器中元素个数
empty()判断容器是否为空
capacity()返回容器容量
resize(int num)改变容量为num

d.迭代器函数

begin()返回第一个元素的迭代器
end()返回最后一个元素后一个位置的迭代器
rbegin()返回最后一个元素的逆序迭代器
rend()返回第一个元素的前一个位置的逆序迭代器

e.操作

push_back(elem)尾加
push_front(elem)头加
pop_back()尾删
pop_front()头删
insert(pos,a)向pos迭代器指向的位置插入a
insert(pos,a,elem)向pos迭代器指向的位置插入a个elem
erase(pos)删除pos指向的元素
erase(beg,end)清除[beg,end)的内容
clear()清空元素

三、stack:栈

栈,头文件stack,不允许遍历,只能访问栈顶

  1. 构造函数
stack<T> v ;默认构造函数,空的
stack<T> v(a);拷贝构造
  1. 成员函数

a.操作

push(elem)入栈
pop()出栈,删除栈顶元素
top()返回栈顶第一个元素的引用;

b.属性

size()返回容器中元素个数
empty()判断容器是否为空

四、queue:队列

头文件queue,不可以遍历,只有头尾可以访问

  1. 构造函数
queue<T> v ;默认构造函数,空的
queue<T> v(a);拷贝构造
  1. 成员函数
push(elem)入队
pop()出队
back()返回最后一个元素
front()返回第一个元素
empty()是否为空
size()队大小

五、list:链表

链表,头文件list,STL中是双向循环链表,列表迭代器只能前移和后移,不支持随机访问

  1. 构造函数
list<T> v ;默认构造函数,空的
list<T> v(20);初始化20个空间,初始值全0
list<T> v(n,elem);用elem初始化n个空间
list<T> v(a.begin(),a.end());将a的起始迭代器和中止迭代器之间的内容当v的初始值(包含起始迭代器,不包含终止迭代器)
list<T> v(a);拷贝构造
  1. 成员函数

a.赋值

assign(n,elem)将n个elem赋值
assign(beg,end)将[beg,end)之间的元素拷贝赋值(迭代器)
重载等号运算符operator=

b.访问

front()返回第一个元素的引用
back()返回最后一个元素的引用

c.属性

size()返回容器中元素个数
empty()判断容器是否为空
resize(num,elem)改变大小为num,多出的用elem填充
resize(int num)改变容量为num

d.迭代器函数

begin()返回第一个元素的迭代器
end()返回最后一个元素后一个位置的迭代器
rbegin()返回最后一个元素的逆序迭代器
rend()返回第一个元素的前一个位置的逆序迭代器

e.操作

push_back(elem)尾加
push_front(elem)头加
pop_back()尾删
pop_front()头删
insert(pos,a)向pos迭代器指向的位置插入a
insert(pos,a,elem)向pos迭代器指向的位置插入a个elem
insert(pos,beg,end)在pos指向的地方插入[beg,end)区间内的内容
erase(pos)删除pos指向的元素
erase(beg,end)清除[beg,end)的内容
clear()清空元素
remove(elem)删除所有与elem值匹配的内容
unique()删除容器中相邻的重复元素,只留下一个
reverse()反转链表
sort(fun)排序,默认升序,成员函数(所有不支持随机访问迭代器的容器都不能用标准算法),可用fun指明排序规则

六、set:集合

集合,包含头文件set,关联式容器,自动排序,不容许有重复元素

mutiset:可以重复插入数据

  1. 构造函数
set<T> v ;默认构造函数,空的
set<T> v(a.begin(),a.end());将a的起始迭代器和中止迭代器之间的内容当v的初始值(包含起始迭代器,不包含终止迭代器)
set<T> v(a);拷贝构造
  1. 成员函数

a.赋值

重载等号运算符operator=

b.访问

find(key)存在,返回指向该元素的迭代器,不存在返回end()迭代器
count(key)统计key出现的次数,set只有0、1两种取值,mutiset可以大于1
lower_bound(val)返回一个指向当前 set 容器中第一个大于或等于 val 的元素的双向迭代器
upper_bound(val)返回一个指向当前 set 容器中第一个大于 val 的元素的迭代器
equal_range(val)返回对组,first和second所构成的区间值为val

c.属性

size()返回容器中元素个数
empty()判断容器是否为空

d.迭代器函数

begin()返回第一个元素的迭代器
end()返回最后一个元素后一个位置的迭代器
rbegin()返回最后一个元素的逆序迭代器
rend()返回第一个元素的前一个位置的逆序迭代器

e.操作

insert(elem)插入elem元素,返回是否成功
erase(pos)删除pos指向的元素
erase(beg,end)清除[beg,end)的内容
erase(elem)删除值为elem的元素
clear()清空元素

七、pair:对组

对组,不用包含头文件,把两个元素捆绑为对组。

  1. 构造函数
pair<T1,T2> p(V1,V2);V1为first,V2为second
pair<T1,T2> p = make_pair(V1,V2);
  1. 访问
    p.first——第一个元素
    p.second——第二个元素

八、map:字典

字典,头文件map,所存的元素为pair,所有元素按键值排序,键值不能重复

mutimap:key可以重复

  1. 构造函数
map<T1,T2> v ;默认构造函数,空的
map<T1,T2> v(a);拷贝构造
  1. 成员函数

a.赋值

重载等号运算符operator=

b.访问

find(key)返回指向key键的元素迭代器,没有返回end()
count(key)统计key个数
operator[]重载[]运算符,通过key索引查找value,key不存在会新建添加
lower_bound(val)返回一个指向当前 map 容器中key第一个小于或等于 val 的元素的双向迭代器
upper_bound(val)返回一个指向当前map 容器中key第一个大于 val 的元素的迭代器
equal_range(val)返回对组,first和second所构成的区间值为val

c.属性

size()返回容器中元素个数
empty()判断容器是否为空

d.迭代器函数

begin()返回第一个元素的迭代器
end()返回最后一个元素后一个位置的迭代器
rbegin()返回最后一个元素的逆序迭代器
rend()返回第一个元素的前一个位置的逆序迭代器

e.操作

insert(elem)插入elem元素,返回是否成功
erase(pos)删除pos指向的元素
erase(beg,end)清除[beg,end)的内容
erase(elem)删除值为elem的元素
clear()清空元素
  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
STL(Standard Template Library)提供了一个名为`std::map`的关联容器,它基于红黑树实现,用于存储键值对,并按照键的顺序进行排序。下面是`std::map`容器的一些常用方法: 1. 插入元素: ```cpp std::map<Key, Value> myMap; myMap.insert(std::make_pair(key, value)); // 使用insert方法插入键值对 myMap[key] = value; // 使用下标操作符[]插入键值对,如果键已存在,则会更新值 ``` 2. 删除元素: ```cpp myMap.erase(key); // 根据键删除元素 myMap.clear(); // 清空所有元素 ``` 3. 访问元素: ```cpp Value value = myMap[key]; // 使用下标操作符[]访问指定键对应的值 auto it = myMap.find(key); // 使用find方法查找指定键的迭代器 if (it != myMap.end()) { Value value = it->second; // 通过迭代器访问指定键对应的值 } ``` 4. 遍历容器: ```cpp for (const auto& pair : myMap) { Key key = pair.first; // 键 Value value = pair.second; // 值 // 其他操作 } ``` 5. 判断元素是否存在: ```cpp if (myMap.count(key) > 0) { // 键存在 } ``` 6. 获取容器大小和判断容器是否为空: ```cpp size_t size = myMap.size(); // 获取容器中键值对的个数 bool isEmpty = myMap.empty(); // 判断容器是否为空 ``` 这些是`std::map`容器的一些常用方法,还有其他一些方法和成员函数可以进一步扩展其功能。你可以参考C++标准库的文档以获取更详细的信息。 希望对你有所帮助!如果还有其他问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值