9.4 vector对象是如何增长的
vector和string的实现通常会分配比新的空间需求更大的内存空间,容器预留这些作为备用,可用来保存更多的新元素。
当需要的内存空间超过当前容量时,reserve调用才会改变vector的容量。
如果需求大小大于当前容量,reserve至少分配与需求一样大的内存空间。
在调用reserve之后,capacity将会大于或等于传递给的reserve参数。
调用reserve永远不会减少容器占用的内存空间。
只有在执行insert操作时size与capacity相等,或调用resize或reserve时给定大小超过capacity,vector才重新分配内存空间。
shrink_to_fit只是一个请求,标准库不保证退还内存。
9.5 额外的string操作
9.5.1 构造string的其他方法
string s(cp,n) 若未传递计数值且数组也未以空字符结尾,或者给定计数值大于数组大小,则构造行为未定义。
string s(s2,pos2) 若位置大于size,则构造函数抛出一个out_of_range异常。
string s(s2,pos2,len2) 若传递一个计数值,则最多拷贝到结尾。
s.substr(pos,n) 返回一个string,包含从pos开始的n个字符的拷贝。
9.5.2 改变string的其他方法
s.insert(pos,args) 运行使用一个下标或迭代器指定插入点。
s.erase(pos,len)
s.assign(args) assign总是替换string中的所有内容。
s.append(args) append总是将新字符追加到string末尾。
s.replace(range,args) 可以通过一个位置和一个长度指定范围,也可以是一个迭代器范围。
9.5.3 string搜索操作
每个搜索操作都返回一个string::size_type值。若搜索失败,则返回一个名为string::npos的static成员。
标准库将npos定义为一个const string::size_type类型,并初始化值为-1,此初始值意味着npos等于任何string的最大可能大小。
9.6 容器适配器
顺序容器适配器:stack、queue、priority_queue。
默认情况下,stack和queue是基于deque实现的,priority_queue是在vector上实现的。可以重载默认容器类型。
stack<string,vector<string>> str_stk;