《C++ Primer》读书笔记第十二章-2-动态数组 And 文本查询程序
2017-09-26 11:27
381 查看
笔记会持续更新,有错误的地方欢迎指正,谢谢!
虽然接下来要介绍动态数组,但一般情况下还是推荐使用容器。因为:使用容器的类可以使用默认版本的拷贝、赋值和析构操作;而分配动态数组的类必须自定义这些。蛋疼
有一些灵活性的局限:
new将内存分配和对象构造放在一起;
delete将对象析构和内存释放放在一起。
在分配单个对象时,通常希望将内存分配和对象初始化放在一起,因为我们一般是知道对象有什么值才去给它分配内存的。
但是,在分配一大块内存时,情况就有些不同了,我们希望将内存分配和对象构造分离,就是说,我们先分配大块内存,在真正需要时才执行对象创建操作。
了解即可:allocate可分配一定大小的原始未构造的内存。
(line 36) A set elements contains only a key;
(lin 158) operator creates a new element
此处省略剩下的大约100行。这些行都是单词element出现的位置。
map使用键值对的方式来储存数据,键不能有重复的,值可以重复,map使用键来存储数据,系统会根据键来自动将数据排序;set键不能有重复,使用键来存储数据,系统会根据该值来自动将数据排序。
详细可见:http://blog.csdn.net/billcyj/article/details/78065438
shared_ptr允许多个指针指向同一个对象。
详细可见:http://blog.csdn.net/billcyj/article/details/78079808
书上讲得太好了,直接放图~
动态数组
之前学到的那些动态内存分配,一次只能分配/释放一个对象,但某些应用需要一次为对象分配很多内存,C++语言定义了另一种new表达式语法,可以分配并初始化一个对象数组。虽然接下来要介绍动态数组,但一般情况下还是推荐使用容器。因为:使用容器的类可以使用默认版本的拷贝、赋值和析构操作;而分配动态数组的类必须自定义这些。蛋疼
初始化动态数组
可用空括号或花括号对数组初始化,但不能在括号中出现初始化器,所以不能用auto。string *psa2 = new string[10](); //10个空string string *psa3 = new string[10]{"a", "b", string(3, 'c')}; //前三个定了,后面默认初始化。
释放动态数组
为了释放动态数组,我们要在delete和指针之间加一个方括号。否则会没有警告但行为异常。delete [] pa; //pa必须指向一个动态分配的数组或pa为空。 delete p; //p必须指向一个动态分配的对象或p为空。
有一些灵活性的局限:
new将内存分配和对象构造放在一起;
delete将对象析构和内存释放放在一起。
在分配单个对象时,通常希望将内存分配和对象初始化放在一起,因为我们一般是知道对象有什么值才去给它分配内存的。
但是,在分配一大块内存时,情况就有些不同了,我们希望将内存分配和对象构造分离,就是说,我们先分配大块内存,在真正需要时才执行对象创建操作。
了解即可:allocate可分配一定大小的原始未构造的内存。
使用标准库实现 文本查询程序
这是一个很好用的程序,可作为标准库相关内容学习的总结。程序功能:
允许用户在一个给定的文件中查询单词,查询的结果是单词在文件中出现的次数,还有这些单词所在行的列表。如果一个单词在一行中出现多次,此行只列出一次,行会按照升序输出。举例:
输入:
给定文件为“本章C++ Primer英文版内容”,单词为“element”。输出:
element occurs 112 times(line 36) A set elements contains only a key;
(lin 158) operator creates a new element
此处省略剩下的大约100行。这些行都是单词element出现的位置。
实现:
概念补充:map使用键值对的方式来储存数据,键不能有重复的,值可以重复,map使用键来存储数据,系统会根据键来自动将数据排序;set键不能有重复,使用键来存储数据,系统会根据该值来自动将数据排序。
详细可见:http://blog.csdn.net/billcyj/article/details/78065438
shared_ptr允许多个指针指向同一个对象。
详细可见:http://blog.csdn.net/billcyj/article/details/78079808
书上讲得太好了,直接放图~
相关文章推荐
- 《C++ Primer 5th》读书笔记4---文本查询程序
- C++ Primer 学习笔记_38_STL实践与分析(12)--集成的应用程序容器:文本查询程序
- 《c++ primer》文本查询程序和邮件处理程序
- 一个简单的文本查询程序—摘至《C++ Primer》
- C++ Primer 文本查询程序
- C++ primer 文本查询程序 Query
- C++ primer 第五版 12.3文本查询程序完整版
- 容器的综合应用:文本查询程序(摘自C++ Primer)
- 【C++ Primer】【学习笔记】【第十章】关联容器之:文本查询程序
- C++ Primer文本查询程序(TextQuery)的实现(2014.5.24)
- 【C++ Primer】文本查询程序再探
- C++ Primer 第5版之文本查询程序类
- c++ primer( 文本查询程序)
- C++ Primer : 第十二章 : 文本查询程序
- C++ Primer 第五版 文本查询程序
- C++ Primer文本查询程序(TextQuery)功能加强版
- C++ Primer 学习笔记_38_STL实践与分析(12)--容器的综合应用:文本查询程序
- C++ Primer 关联容器--容器的综合应用:文本查询程序
- C++ Primer 第15章例子-文本查询程序
- C++ primer 文本查询程序