C++ primer 第九章个人笔记

个人笔记,txt备份用。不考虑排版。
顺序容器类型:
vector 可变数组,支持快速随机访问 在尾部之外的地方插入元素不方便
deque 双端队列,支持快速随机访问,在首尾部之外的地方插入删除元素麻烦
list 双向链表 任何位置插入删除元素快 只能双向访问
forward_list 单向链表 任何位置插入删除元素快 只能单向访问
array 固定长度数组 支持快速随机访问 无法增删元素
string 字符串 支持快速随机访问 在尾部之外的地方插入元素不方便
除非有很好的理由选择其他容器 否则使用vector
如果要求在容器中间插入或删除 使用List or forward_list
如果要求随机访问 使用vector deque
如果要求在头尾插入删除但不影响中间 使用deque

类型别名:
value_type T;元素类型别名
allocator_type;分配器类型
size_type; 无符号类型 通常是std::size_t
difference_type 有符号类型通常是std::ptrdiff_t
reference相当于value_type&相当于T& 元素类型引用
const_reference相当于const value_type&相当于const T & 常量引用
pointer相当于value_type相当于T;元素类型指针
const_pointer相当于const value_type 相当于const T;常量指针
iterator;迭代器类型
const_iterator;常迭代器
reverse_iterator;反向迭代器
const_reverse_iterator常反向迭代器

构造函数通用写法
C c;默认构造函数 构造空容器
C c1(c2);拷贝构造,将C2拷贝到C1
C c(b,e)构造c,将b和e指定范围的内容拷贝到c里(array不支持)
C c{a,b,c} 列表初始化c
赋值与swap
c1=c2 将c1的内容替换为c2
c1={a,b,c}将c1中元素替换为列表内内容
a.swap(b) 交换a和b中元素,等价于swap(a,b)
c.assign(b,e) 重新设置 c 的元素:将迭代器 b 和 e 标记的范围内所有的元素复制到 c 中。b 和 e 必须不是指向 c 中元素的迭代器
c.assign(n,t) 将容器 c 重新设置为存储 n 个值为 t 的元素
大小:
c.size() c中元素数目//(forward_list无此操作)
c.max_size() c中可保留最大元素数量
c.empty() 是否为空
删增操作
push(emplace)_back/front 尾部/头部 增加/删除元素 array不支持 forward_list不支持push_back和emplace_back array全部不支持;//返回void
insert(p,t) 在指定p位插入t,forward_list和array不支持,forward_list有特殊版本 insert_after //返回插入元素的迭代器位置
erase(args)删除args内指定的因素,erase返回删除的(最后一个)元素之后位置的迭代器, forward_list中使用特殊版本erase——erase_after(const_iterator pos )/erase_after(const_iterator begin,const_iterator end) 擦除范围内的元素
pop_back/front() 删除尾元素/首元素 vector不支持pop_front forward_list不支持pop_back
访问操作 下标访问和at访问仅适用于string vector deque array
forward_list不支持back()操作。
back() 返回尾元素的引用,若c为空,则未定义
front() 返回首元素的引用,若c为空,则未定义
c[n]返回下标为n的引用 若n>c.size(),则未定义
c.at(n)返回下标为n的引用,若n>size(),则未定义

begin 和end

c.begin()      返回一个迭代器,它指向容器c的第一个元素。 常量版本cbegin()

c.rbegin()     返回一个逆序迭代器,它指向容器c的最后一个元素。

c.end()         返回一个迭代器,它指向容器c的最后一个元素的【下一个位置//而非最后一个元素!!!】。常量版本cend()

c.rend()         返回一个逆序迭代器,它指向容器c的第一个元素的前面位置。

string vector deque管理容器大小的特殊操作
shrink_to_fit() 将capacity请求与size保持同样大小
string vector特殊操作
capacity()返回不重新申请内存的话,该对象可保存多少元素
reserve(new_cap) 增加 vector 的容量到大于或等于 new_cap 的值。若 new_cap 大于当前的 capacity() ,则分配新存储,否则该方法不做任何事。reserve() 不更改 vector 的 size 。

vector扩容操作例:
初始化时分配的capacity大于等于实际size。(依编译器行为)
当capacity>=size时,不进行任何扩容操作,如果遇到增添操作时capacit<所需size时,通常将capacity扩大一倍
string特殊操作
构造:
string c(cp,n) c是指向cp数组前n个字符的拷贝,该数组至少包括n个字符
string c(str2,pos) c是指向string str2从下标pos开始的拷贝,若pos>str2.size();该行为未定义
string c(str2,pos,len) c是指向string str2从下标pos开始len个字符的拷贝,若pos>str2.size();该行为未定义,无论len为多少,该构造函数最多拷贝str2.size()-pos2个字符
删增改
除了接受迭代器的insert和erase版本,string还增加了支持下标的版本,同时还支持了插入C语言风格字符串的insert和assign版本
insert(index,count,char) 从index插入count个字符char
insert(index,const char*) 从index插入C风格字符串
insert(index,const char*,len)从index插入C风格字符串中的前len个
insert 接受下标的版本返回对象引用,接受迭代器的版本返回第一个插入字符的迭代器
erase( size_type index = 0, size_type count = npos ); 从index开始删除count个字符
append(args)追加args返回对象引用
replace(range,args) 删除range(一个下标和长度,或者一对迭代器)内的元素并替换为args,返回对象引用
搜索 (如果找到,返回该元素下标,如果不,返回npos)
find(args) 查找args第一次出现的位置
rfind(args)查找args最后一次出现的位置
find_first_of(args)查找args中任一字符第一次出现的位置
find_last_of(args)查找args中任一字符最后一次出现的位置
find_first_not_of(args)查找不在args中的任一字符第一次出现的位置
find_last_not_of(args)查找不在args中的任一字符第一次出现的位置
特殊
sub_str(size_type pos = 0,size_type count = npos ) 返回从pos到count的子串字符串
forward_list特殊操作补充
before_begin()/cbefore_begin() 返回首元素的前一个位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值