《C++ Primer》读书笔记第九章-3-额外的string操作 And 容器适配器
2017-09-19 23:12
281 查看
笔记会持续更新,有错误的地方欢迎指正,谢谢!
取子字符串:(substr)
例子:
到底适配器啥意思呢?适配器就是一种机制,能让某种事物的行为看起来像另一种事物。容器适配器接受一个已有的容器类型,使其行为看起来像一种不同类型。
我的理解:栈、队列、优先队列这些数据结构都是大家比较常用的,C++也不好意思不支持,于是把原来顺序容器的那些再通过适配器转换成这三个数据结构。
stack和queue是基于deque实现的,priority_queue是在vector之上实现的。
定义:
压入元素到栈顶:
弹出(删除)栈顶元素:
返回栈顶元素:
再提一句:虽然stack是基于deque实现的,但不能使用push_back,必须用自己的push,这样看起来就像两个不同的事物,这不就满足了适配器的意思了嘛。。。
priority_queue
举个例子:我们的优先队列装的元素是一个类person,它有属性姓名,年龄,学历等,我们就可以 以其中任意一个属性为优先级来排序。
额外的string操作
除了顺序容器的共同操作之外,string还有些额外操作,在此介绍。函数贼多,用到的时候再回来查找吧构造string的其他方法
构造string的其他方法 | 作用 |
---|---|
string s(cp, n) | s是cp指向的数组中前n个字符的拷贝 |
string s(s2, pos2) | s是string s2从下标pos2开始的字符的拷贝(若pos2>s2.size(),此函数行为未定义) |
string s(s2, pos2, len2) | s是string s2从下标pos2开始的len2个字符的拷贝(若pos2>s2.size(),函数行为未定义;若len2太大,只拷贝剩余元素) |
string s("hello world"); string s2 = s.substr(0, 5) //括号是前闭后开=>s2 = "hello" string s3 = s.substr(6) //s2 = "world" string s4 = s.substr(6, 11) //s2 = "word",从6开始,最多拷贝到末尾 string s2 = s.substr(12) //抛出一个out_of_range异常
改变string的其他方法
string s1("hello world"); s1.insert(s1.size(), 5, '!'); //s1 = "hello world!!!!!" s1.eraser(s1.szie()-5, 5); //s1 = "hello world" string s2("C++ Primer"); s2.append(" 4th Ed."); //s2 = "C++ Primer 4th Ed."
string搜索操作
找到返回下标,没找到返回空。函数 | 含义 |
---|---|
s.find(args) | 查找s中args第一次出现的位置 |
s.rfind(args) | 查找s中args最后一次出现的位置 |
string river = "西调西"; auto first = river.find("西"); //返回0 auto last = river.rfind("西"); //返回2
compare函数
compare有很多重载的版本,都是按字典序比较:string s1("hello"); string s2("Bill"); //区间都是左闭右开 s1.compare(s2); //hello跟Bill比 s1.compare(0, 2, s2); //”hello“的0到1位和”Bill“比,即he和Bill比。 s1.compare(0, 3, s2, 0, 1); //”hello“的0到2位和”Bill“的第0位比,即hel和B比。 s1.compare(0, 2, s2, 2); //he和by比
数值转换
C++11新标准引入了一些函数,可以实现数值数据与string之间的来回转换:int i = 42; string s = to_string(i); //s = "42",to_string()挺实用的。 double d = stod(s); //string->double
容器适配器
容器适配器介绍:
除了顺序容器外,标准库还定义了三个顺序容器适配器:stack栈、queue队列、priority_queue优先队列。到底适配器啥意思呢?适配器就是一种机制,能让某种事物的行为看起来像另一种事物。容器适配器接受一个已有的容器类型,使其行为看起来像一种不同类型。
我的理解:栈、队列、优先队列这些数据结构都是大家比较常用的,C++也不好意思不支持,于是把原来顺序容器的那些再通过适配器转换成这三个数据结构。
stack和queue是基于deque实现的,priority_queue是在vector之上实现的。
栈适配器
栈是先入后出的:定义:
stack<int> result;
压入元素到栈顶:
result.push(i);
弹出(删除)栈顶元素:
result.pop();
返回栈顶元素:
result.top();
再提一句:虽然stack是基于deque实现的,但不能使用push_back,必须用自己的push,这样看起来就像两个不同的事物,这不就满足了适配器的意思了嘛。。。
队列适配器
queue队列先进先出,功能就是返回头尾、添加、删除、代替等,用的时候就查表呗。priority_queue
举个例子:我们的优先队列装的元素是一个类person,它有属性姓名,年龄,学历等,我们就可以 以其中任意一个属性为优先级来排序。
迭代器失效
添加或删除元素可能使指向容器元素的指针、引用、迭代器失效。相关文章推荐
- C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器
- 《C++ Primer》读书笔记-第九章 05 额外的string操作
- 《C++ Primer》读书笔记第九章-2-顺序容器操作 And vector增长问题
- 《C++ Primer》读书笔记-第九章 06 容器适配器
- 《C++ Primer》读书笔记第九章-1- 顺序容器概述 And 容器库概览
- C++ primer 读书笔记系列——(6)顺序容器(三)之再谈string类型和容器适配器
- 《C++ Primer》读书笔记-第九章 03 顺序容器操作
- 【C++ Primer】【学习笔记】【第九章】顺序容器之:顺序容器的操作
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
- 《C++ Primer》读书笔记-第九章 01 顺序容器
- C++ primer 读书笔记 第九章 顺序容器
- c++ primer 读书笔记 第九章 顺序容器有那些 vector list deque stack queue priority-queue
- 《C++ Primer》读书笔记第十一章-2-关联容器操作
- 读书笔记《C++ Primer》第五版——第九章 顺序容器
- 《C++ Primer》读书笔记——第九章_顺序容器
- string 与 vector及容器操作的异同
- 读书笔记:C++ primer 5th edition--chapter11.关联容器
- 《Microsoft Sql server 2008 Internals》读书笔记--第九章Plan Caching and Recompilation(5)
- 《C++ Primer》读书笔记第三章-1-标准库类型string
- C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器