《C++ Primer》读书笔记第十二章-2-动态数组 And 文本查询程序

笔记会持续更新,有错误的地方欢迎指正,谢谢!

动态数组

之前学到的那些动态内存分配,一次只能分配/释放一个对象,但某些应用需要一次为对象分配很多内存,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为空。

有一些灵活性的局限:

  1. new将内存分配和对象构造放在一起;
  2. 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出现的位置。

实现:

概念补充:

  1. map使用键值对的方式来储存数据,键不能有重复的,值可以重复,map使用键来存储数据,系统会根据键来自动将数据排序;set键不能有重复,使用键来存储数据,系统会根据该值来自动将数据排序。
    详细可见:http://blog.csdn.net/billcyj/article/details/78065438
  2. shared_ptr允许多个指针指向同一个对象。
    详细可见:http://blog.csdn.net/billcyj/article/details/78079808

书上讲得太好了,直接放图~

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值