首页 > 其他分享 >[Primer] 第 16 章 string 类和标准模板库

[Primer] 第 16 章 string 类和标准模板库

时间:2023-03-09 20:33:25浏览次数:35  
标签:unique string 迭代 16 函数 Primer ptr 模板 指针

第 16 章 string 类和标准模板库

16.1 string

16.2 智能指针模板类

要创建智能指针对象,必须包含头文件 <memory>。离开代码块后,智能指针将自动释放内存。

声明只能指针的方法为 auto_ptr<Type> pt(new Type);,然后可以将 pt 当作普通指针使用而无需 delete

使用赋值语句或者复制构造函数时,auto_ptr 会转让所有权,只有一个智能指针可以拥有该对象。转让所有权后再用原智能指针访问该对象将产生不确定行为。如果使用 unique_ptr 则会认为该语句非法,仅当原指针时临时右值时才允许赋值操作。而 shared_ptr 会进行引用计数跟踪引用对象,仅当最后一个指针过期时,才调用 delete

禁止在容器对象中使用 auto_ptr,但可以使用 unique_ptr,防止持久的所有权转让。auto_ptr 不允许用于数组,但 unique_ptr 允许。

如果必须给 unique_ptr 赋值,则需要使用 std::move() 函数。

如果程序需要使用多个指向同一对象的指针,则应该使用 shared_ptr,否则应该使用 unique_ptr。如果用函数分配内存,应该返回 unique_ptr 使所有权转让给接受返回值的 unique_ptr

模板 shared_ptr 包含一个显式构造函数,可用于将右值 unique_ptr 转换为 shared_ptr

16.3 标准模板库

所有的 STL 容器都提供了一些基本方法,包括返回容器中元素数目的 size(),交换两个容器内容的 swap(),返回第一个元素的迭代器 begin(),返回一个超过容器尾的迭代器 end()

声明并使用迭代器 vector<double>::iterator pd = scores.begin(); *pd = 10; pd++;,可以看出迭代器的行为类似于指针。

for_each(books.begin(), books.end(), show) 函数可以代替 for 循环对区间内每个元素执行同样的操作。random_shuffle(books.begin(), books.end()) 函数可以随机排列区间内的元素。sort() 第一种函数允许传入两个迭代器,函数将使用对象的 < 运算符对区间内元素进行升序排序;第二种函数允许传入两个迭代器和一个返回布尔类型的函数指针,可以实现降序排序。

16.4 泛型编程

泛型编程的函数独立于容器中存储的数据类型,而且独立于容器本身的数据结构;因此模板也需要这两种数据类型的通用表示。

C++ 将 operator++() 用作前缀版本,operator++(int) 用作后缀版本。

STL 定义了输入迭代器、输出迭代器、正向迭代器、双向迭代器和随机访问迭代器五种类型。

16.5 函数对象

可以重载函数符 () 使模板类中函数指针实现函数调用功能。

16.6 算法

16.7 其他库

标签:unique,string,迭代,16,函数,Primer,ptr,模板,指针
From: https://www.cnblogs.com/futureknight/p/17201314.html

相关文章