C++ Primer Plus 第六版 第16章 string类和标准模板库

1.string实际上是模板具体化basic_string<char> 的一个typedef,有默认参数,所以省略了初始化参数

2.size_type是一个依赖于实现的整形

string将string::npos定义为字符串的最大长度

3.string类的构造函数P656

4.对于c-风格字符串,3种输入方法:cin>>   cin.getline(),cin.get

对于string   ,2种输入方法:cin>>,getline(cin,string对象)

5.string的长度有两个方法得到

.length(),.size()

6.重载了4个find函数 P662

还有rfind,find_first_of,find_last_of,find_first_not_of,find_last_not_of

7.使用string的.c_str可以得到一个c-风格字符串

8.智能指针是一个对象,当对象过期时,让它的析构函数删除指向的内存。

这就是auto_ptr,unique_ptr,shared_ptr背后的思想。

9.声明智能指针

auto_ptr<double> pd(new double)

shared_ptr<double> pd(new double)

unique_ptr<double> pd(new double)

可以使用*,->运算符

10.智能指针应当指向堆内存

11.对于两个智能指针指向同一个内存空间,将会出现析构两次的问题。

针对这个问题,有三个解决方案:

一。进行深复制,产生新的副本

二、建立所有权概念,一旦一个智能指针赋给另一个,原来指针失去所有权,新指针获取,最终新指针析构。auto_ptr,unique_ptr就是这样实现的

三、使用引用计数,每当智能指针赋给另一个,则计数+1,当最后一个指针过期时,才调用delete,这是shared_ptr的做法

12.unique_ptr和auto_ptr的区别

程序试图将一个unique_ptr赋给另一个时,如果源unique_ptr是个临时右值,编译器允许,如果源unique_ptr将存在一段时间,将禁止这样做

auto是两种情况都可以。

例子:

auto_ptr<string> p1(new string("auto")); auto_ptr<string> p2; p2 = p1; 允许

unique_ptr<string> p3(new string("auto")); unique_ptr<string> p4; p4 = p3; 不允许,p3不是临时对象

临时对象一般发生在函数的返回值是一个智能指针,而且是一个临时对象

13.shared_ptr和auto_ptr只有new版本申请堆内存

而unique_ptr有new和new []两个版本。所以可以 std::unique_ptr<double[]> pda(new double(5));

14.通常使用shared_ptr,其次unique_ptr,最后auto_ptr

15.memory若没有shared_ptr和unique_ptr,则使用BOOST库

16.STL提供了一组表示容器,迭代器,函数对象和算法的模板

容器存储的值类型是相同的

算法是实现特定任务的处方

迭代器是能够遍历容器的对象,广义指针

函数对象时类似于函数的对象,包括类对象和函数指针

17.STL容器都有的基本方法

size()容器的元素数目;swap()交换两个容器的内容,begin()返回指向容容器第一个元素的迭代器;end()返回一个表示超过容器尾的迭代器

18.每种容器有一个合适的迭代器,类型是名为iterator的typedef

声明如:vector<double>::iterator pd

19.超过容器尾,类似于c-风格字符串后的空字符,表示容器最后元素的后面

20.push_back(),常用添加元素到容器的方法

erase()接受两个迭代器参数,用于删除给定区间中的元素 删除范围为[it1,it2),不包括it2

insert()接受3个参数,一个是插入位置的迭代器,后两个有迭代器组成的插入区间。会插入在插入位置的前面

21.STL定义了通用的非成员函数用于不同容器使用相同的函数

3个常用STL函数

for_each(),3个参数,前两个是迭代器区间,后面的是一个函数指针(函数对象)

random_shuffle(),接受两个迭代器区间,随机排列区间中的元素

sort()有两个版本

一、接受两个迭代器区间,对容器元素使用成员函数或非成员函数的operator<()进行比较,排序

二、接受3个参数,前两个是区间,最后一个是函数指针(函数对象),使用函数指针调用的函数比较,得到排序结果

22.C++11新增基于范围的for循环

for(double x: price) cout<<x<<endl;

进一步,使用auto自动类型识别,可以 for(auto x:price) cout<<x<<endl;

23.oop关注的是编程的数据方面,而泛型编程关注的是算法。它们之间的共同点是抽象和创建可重用代码

理解迭代器是理解STL的关键所在。模板使得算法独立于存储的数据类型。而迭代器使算法独立于使用的容器类型。因此,它们都是STL通用方法的重要组成部分

24.为重载区分++运算符的前缀和后缀版本,使用

operator++ 前缀版本

operator++(int)后缀版本

25.每个容器类定义了相应的迭代器类型,迭代器可能是指针,可能是对象。

迭代器能够: * ++等运算符

容器类:有begin()和end()方法,指向第一个元素和超尾位置的迭代器

26.输入迭代器:单通行,只读算法

输出迭代器;单通行,只写算法

正向迭代器:单通行,可读可写

双向迭代器:双通行,可++,-- ,可读可写

随机访问迭代器:可随机跳转到容器任何一个元素

描述迭代器功能的:P690

27.从以上迭代器来看,从概念上,有继承的关系。但是不能使用C++继承机制用于迭代器。

因为迭代器的实现多种多样。只是一种概念上的继承。

概念的具体实现称为模型

28、迭代器是广义指针。而指针满足所有迭代器要求

29.一些STL函数

sort()排序

copy()复制

30.一些有用的预定义迭代器

ostream_iterator,istream_iterator,reverse_iterator,back_insert_iterator,front_iterator,insert_iterator

P692

31.容器种类

容器概念是具有名称的通用类别:如容器,序列容器,关联容器

容器类型是可创建具体容器对象的模板;deque,list,queue,priority_queue,stack,vector,map,multimap,set,multiset,bitset

C++11新增:forward_list,unordered_map,unordered_multimap,unordered_multiset

容器概念指定了所有STL容器类都必须满足的一系列要求

容器是存储其他对象的对象。存储的对象必须是同一种类型的。容器过期,存储的也过期

存储的对象是可复制构造和可赋值的

32.容器的基本特征P695

33.序列sequence

序列要求元素按严格的线性顺序排列。序列的要求:P697

各种模板类的介绍P698-P701

关联容器,set,muitiset,map,multimap P702 - P706

无序关联容器

34.函数对象

也叫函数符。包括函数名,指向函数的指针和重载了()运算符的类对象(operator()()的类)

函数符的概念P708

预定义的函数符P710-P711

35.算法 P713-P720

STl的一些通用函数

将算法库分成4组:1.非修改式序列操作,2.修改式序列操作,3.排序和相关操作,4,通用数字运算

前三组在algorithm,最后在头文件numeric

16.10 看得我太恶心了 有时间再做

C++ Primer Plus 第六版 第16章 string类和标准模板库,布布扣,bubuko.com

时间: 2024-12-24 16:02:51

C++ Primer Plus 第六版 第16章 string类和标准模板库的相关文章

C++ primer plus读书笔记——第16章 string类和标准模板库

第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string & str, size_type pos = 0, size_type n = pos)初始化为str中从pos开始到结尾的字符,或从pos开始的n个字符 string(const char *s, size_type n)初始化为s指向的前n个字符,即使超过了s的结尾: string(Iter b

《C++ Primer Plus》第16章 string类和标准模板库 学习笔记

C++提供了一组功能强大的库,这些库提供了很多常见编程问题的解决方案以及简化其他问题的工具string类为将字符串作为对象来处理提供了一种方便的方法.string类提供了自动内存管理动能以及众多处理字符串的方法和函数.例如,这些方法和函数让您能够合并字符串.将一个字符串插入到另一个字符串中.反转字符串.在字符串中搜索字符或姊姊富川以及执行输入和输出操作.诸如auto_ptr以及C++11新增的shared_ptr和unique_ptr等智能指针模板使得管理由new分配的内存更容易.如果使用这些智

c++ primer plus 第六版程序清单16.8 vect2.cpp 手打源码编译错误!!!

坚持手打源码,编译运行,但未每个程序均进行单步调试,昨天在VS2017上手打c++ primer plus 第六版程序清单16.8 vect2.cpp后编译出错: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

C++ Primer(第五版)学习笔记_5_标准模板库string(2)

C++ Primer(第五版)学习笔记_5_标准模板库string(2) 10.搜索string对象的元素或子串 采用find()方法可查找字符串中的第一个字符元素(char, 用单引号界定)或者子串(用双引号界定):如果查到,则返回下标值(从0开始计数),如果查不到,则返回一个很大的数string:npos(即:4294967295). #include <iostream> #include <stdio.h> #include <string> using nam

c++ primer plus(第6版)中文版 第九章编程练习答案

首先,说明下环境: linux:fedora14: IDE:eclipse: python:python2.7 python框架:django web服务器:apache web服务器的python模块:mod_wsgi 写在前面: 之前用的windows下面的xampp,写的php后台,现在想转向linux下面的python,跟以前一样,选择apache和eclipse作为自己的开发工具. eclipse的python配置, 参见之前的博客:http://blog.csdn.net/zy416

《C++ Primer》 第四版 第7章 函数

<C++ Primer> 第四版 第7章 函数 思维导图笔记 超级具体.很具体,图片版,有利于复习查看 http://download.csdn.net/detail/onlyshi/9479711

C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器

C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器 多重映照容器multimap与map结构基本相同,但由于重复键值存在,所以multimap的元素插入.删除.查找都与map的方法不相同. 1.multimap对象创建.元素插入 插入元素时,需要使用insert()方法和类似pair<string,double>("Jack", 300.5)的元素结构.可以看到,重复的元素是按照插入的先后顺序排序的. #include <iostre

C++ Primer(第五版)学习笔记_3_标准模板库vector(2)

C++ Primer(第五版)学习笔记_3_标准模板库vector(2) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 6.元素的插入 insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置. 要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标. #include <iostream> #include <vector> using namespa

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 标准模板库(STL)提供三种类型的组件:容器.迭代器和算法,他们都支持泛型程序设计标准. 容器主要有两类:顺序容器和关联容器.顺序容器(vector.list.deque和string等)是一系列元素的有序集合.关联容器(set.multiset.map和multimap)包含查找元素的键值. 迭代器的作用是遍历容器. STL算法库包含四类算法:排序算法.不可变序算法.变序性算法