您的位置:首页 > 编程语言 > C语言/C++

读书笔记《C++ Primer》第五版——第九章 顺序容器

2017-11-18 21:11 274 查看

容器定义和初始化

主要形式有

形式备注
C cArray要在C中指定固定大小
C c1(c2)
C c1=c2
c1和c2必须是相同类型,对于array还要相同大小
C c{a,b,c…}
C c={a,b,c…}
列表中元素类型要与C的元素类型相容,对于array,列表元素数目要小于等于array的大小
C c(b,e)迭代器中C中元素相容,array不适用
注意只有顺序容器(array除外)的构造函数才能接受大小参数
C seq(n)构造函数为explicit,string不适用
C seq(n,t)seq包含n个初始值为t的元素

容器赋值运算

主要形式有

形式备注
c1=c2c1和c2必须具有相同的类型
c={a,b,c….}arrary不适用
swap(c1,c2)
c1.swap(c2)
swap比从c2向c1拷贝元素要快得多,且不会使指向容器的迭代器、引用、指针失效(array、string除外)
注意assign不适用于关联容器和array
seq.assign(b,e)迭代器b、e不能指向seq中的元素
seq.assign(il)il为初始化列表
seq.assign(n,t)n个值为t的元素

顺序容器添加元素

arrary不支持这些操作

forward_list有自己专有版本的insert和emplace

forward_list不支持push_back和emplace_back

vector和string不支持push_front和emplace_front

主要形式有

形式备注
c.push_back(t)
c.emplace_back(args)
返回void
c.push_front(t)
c.emplace_front(args)
返回void
c.insert(p,t)
c.emplace(p,args)
返回新增元素的迭代器
c.insert(p,n,t)
c.insert(p,b,e)
c.insert(p,il)
返回新增第一个元素的迭代器;若n为0,返回p

顺序容器访问元素

at和下标操作只适用于string、vector、deque和array

主要形式有

形式备注
c.back()c为空则行为未定义,forward_list不支持
c.front()c为空则行为未定义
c
若n>=c.size(),行为未定义
c.at(n)若下表越界,抛出out_of_range异常

forward_list中插入和删除元素的操作

形式备注
lst.before_begin()
lst.cbefore_begin()
返回首元素前的迭代器,不可解引用
lst.insert_after(p,t)
lst.insert_after(p,n,t)
lst.insert_after(p,b,e)
lst.insert_after(p,il)
返回最后一个插入元素的迭代器,范围为空时行为未定义
emplace_after(p,args)返回新增元素的迭代器,p为尾后迭代器时行为未定义
lst.erase_after(p)
lst.erase_after(b,e)
删除(p,end)或(b,e)区间,返回被删元素之后元素的迭代器,未删除时返回尾后迭代器。如果p指向尾元素或尾后迭代器,行为未定义

顺序容器resize操作

形式备注
c.resize(n)n
c.resize(n,t)任何新增元素都初始化为t

容器大小管理操作

形式备注
c.shrink_to_fit()capacit减少为size相同大小(不保证)//C++11
c.capacity()不重新分配内存时c可保存多少元素
c.reserve(n)分配至少容纳n个元素的内存空间

string的其他方法

构造方法主要有:

string s(cp,n)

string s(s2,pos)

string s(s2,pos2,len2)

修改string的操作

函数备注
s.insert(pos,args)pos为迭代器时分别返回第一个插入字符串的迭代器,为下表时返回s的引用
s.erase(pos,len)
s.assign(args)
s.append(args)
返回s的引用
s.replace(range,args)rang为下标和长度,或者一对s的迭代器,返回s的引用
注意args可以是str、str,pos,len、cp,len、cp、n,c、b,e、初始化列表

string搜索操作

s.find(args)、s.rfind(args)查找args整体出现位置

s.find_first_of(args)、s.find_last_of(args)、s.find_first_not_of(args)、s.find_last_not_of(args)查找args任一字符出现或不出现的位置

args可以为c,pos、s2,pos、cp,pos、cp,pos,n

s.compare的几种参数形式

s2 pos,n1,s2 pos,n1,s2,pos2,n2 cp pos1,n1,cp pos1,n1,cp,n2

stirng和数值之间的转换C++11

函数备注
to_string(val)
stoi(s,p,b)
stol(s,p,b)
stoul(s,p,b)
stoll(s,p,b)
stoull(s,p,b)
size_t指针p保存s中第一个非数值字符的下标,p默认为0,基数b默认为10
stof(s,p)
stod(s,p)
stold(d,p)
ld指的是long double

容器适配器

A a

A a(type, C)

a.empty

a.size()

swap(a,b) a.swap(b) a和b必须有相同类型,包括底层容器也须相同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: