C++ 标准容器库

STL(标准模板库)以模板为基石,将容器和操作容器数据的方法分离开,形成了容器、迭代器、算法三部分,其中迭代器充当容器和算法的粘合剂。

C++的总体思路是:
高效,不检查错误;
复用,使用多态;
最小修改,使用适配器

容器共性

STL只提供copy和move语义,不提供引用语义,因此使用引用时需要包装器ref。

C++将容器分为线形容器、关联容器和无序容器三类,主要以时间和位置进行区分。

一些容器的共性如下:

/* 构造函数 */
c;            //默认构造函数
c(c1);        //拷贝构造函数
c = c1;       //拷贝赋值构造函数
c(move(c1));  //移动构造函数
c = move(c1); //移动赋值构造函数
c{};          //列表初始化
c = {};       //列表初始化
c(begin,end); //区间构造函数

/* 析构函数 */
~

/* 比较运算符 */
==
!=
>
<
>=
<=

/* 容量 */
c.empty()     //是否为空
c.size()      //元素个数
c.maxsize()   //最大容量
c.clear()     //清空容器

/* 迭代器 */
c.begin()
c.end()
c.cbegin()
c.cend()

/* 交换 */
swap(c1,c2)
c.swap()

线形容器

Vector

#include <vector>

/* 构造函数 */
c(n,e); //批量初始化,使用n个字符e
c(n); //初始化容器大小为n

/* 容量 */
c.max_size()     //极限容量值
c.reserve()      //改变容量大小
c.capacity()     //当前容量
c.shink_to_fit() //删除多余空间

/* 赋值 */
c = c2;
c = move(c2);
c = {};
c.assign(n,e);
c.assign(begin,end);
c.assign({});

/* 访问元素 */
c[i]
c.at(i)
c.front()
c.back()

/* 迭代器 */
c.rbegin()
c.rend()
c.crbgin()
c.crend()

/* 插入 */
c.push_back()
c.insert(pos,elem)
c.insert(pos,n,elem)
c.insert(pos,begin,endl)
c.insert(pos,{})
c.emplace(pos,...)
c.emplace_back(pos,...)

/* 删除 */
c.pop_back()
c.erase(i)
c.erase(begin,end)

/* 元素个数 */
c.resize(n)
c.resize(n,m)

Deque

Deque是vector的扩展,在vector基础上提供了前端操作:

#include <queue>

c.push_front()
c.pop_front()

List

List具有Deque的全部成员函数,其他成员函数如下:

#include <list>

/* 算法 */
c.unique()
c.unique(op)

c.sort()
c.sort(op)

c.merge()
c.merge(op)

c.reverse()

/* 插入 */
c.splice(pos,c2)
c.splice(pos,c2,c2pos)
c.plice(pos,c2,c2.begin(),c2.end())

/* 删除 */
remove()
remove_if()

Forward-List

#include <forward_list>

// forward_list的插入和删除接口都带after
c.insert_after()
c.erase_after()
c.splice_after()

关联容器

set

#include <set>

/* 比较算法 */
c.key_comp()       //返回比较算法
c.value_comp()     //返回key的比较准则

/* 查找元素 */
c.count(val)       //返回val个数
c.find(val)        //找到第一个val
c.lower_bound(val) //返回左边界
c.upper_bound(val) //返回右边界
c.equal_range(val) //返回区间

/* 赋值 */
c = c2;
c = move(c2);
c = {};

map

在set基础上,额外提供了:

/* 访问 */
c[key]
c.at(key)

/* 赋值 */
c[key] = value

/* 注意 */
c.count(key) //判断的是key,不是value

无序容器

/* 构造函数 */
c(bnum)
c(bnum,hf)
c(bnum,hf,cmp)
c(begin,end,bnum)
c(begin,end,bnum,hf)
c(begin,end,bnum,hf,cmp)

/* 哈希 */
c.hash_function()      //返回哈希函数
c.key_eq()             //返回相等判断式
c.bucket_count()       //返回bucket数
c.max_bucket_count()   //返回极限bucket数
c.load_factor()        //返回负载系数
c.max_load_factor()    //返回极限负载系数
c.max_load_factor(val) //设定极限负载系数
c.rehash()             //重新hash
c.reserve()            //重新hash

适配器

Stack

c.push()
c.top()
c.pop()

Queue

c.push()
c.front()
c.back()
c.pop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多弗朗强哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值