C++ primer plus 第16章string 类和标准模板库, 函数和容器方法

C++ primer plus 第16章string 类和标准模板库, 函数和容器方法

C++ primer plus 第16章string 类和标准模板库, 函数和容器方法

文章目录

  • C++ primer plus 第16章string 类和标准模板库, 函数和容器方法
  • 16.6.4 函数和容器方法
  • 程序清单 16.18


16.6.4 函数和容器方法

有时可以选择使用STL方法或STL函数。通常方法是更好的选择。首先,它更适合于特定的容器:其次,作为成员函数,它可以使用模板类的内存管理工具,从而在需要时调整容器的长度。例如,假设有一个由数字组成的链表,并要删除链表中某个特定值(例如4)的所有实例。如果la 是一个 list对象,则可以使用链表的remove()方法:
la.remove(4);//remove all 4s from the list调用该方法后,链表中所有值为4的元素都将被删除,同时链表的长度将被自动调整还有一个名为remove()的STL算法(见附录G),它不是由对象调用,而是接受区间参数。因此,如果 1b是一个 list对象,则调用该函数的代码如下:
remove(lb.begin(),lb.end(),4);
然而,由于该remove()函数不是成员,因此不能调整链表的长度。它将没被删除的元素放在链表的开始位置,并返回一个指向新的超尾值的迭代器。这样,便可以用该迭代器来修改容器的长度。例如,可以使用链表的 erase()方法来删除一个区间,该区间描述了链表中不再需要的部分。
程序清单 16.18 演示了这是如何进行的。

程序清单 16.18

// listrmv.cpp -- applying the STL to a string
#include <iostream>
#include <list>
#include <algorithm>void Show(int);
const int LIM = 10;
int main()
{using namespace std;int ar[LIM] = {4, 5, 4, 2, 2, 3, 4, 8, 1, 4};list<int> la(ar, ar + LIM);list<int> lb(la);cout << "Original list contents:\n\t";for_each(la.begin(), la.end(), Show);cout << endl;la.remove(4);cout << "After using the remove() method:\n";cout << "la:\t";for_each(la.begin(), la.end(), Show);cout << endl;list<int>::iterator last;last = remove(lb.begin(), lb.end(), 4);cout << "After using the remove() function:\n";cout << "lb:\t";for_each(lb.begin(), lb.end(), Show);cout << endl;lb.erase(last, lb.end());cout << "After using the erase() method:\n";cout << "lb:\t";for_each(lb.begin(), lb.end(), Show);cout << endl;// cin.get();    return 0;
}void Show(int v)
{std::cout << v << ' ';
}

从中可知,remove()方法将链表la从10个元素减少到6个元素。但对链表Ib应用remove()后,它仍然包含 10个元素。最后4个元素可任意处理,因为其中每个元素要么为4,要么与已经移到链表开头的值相同。尽管方法通常更适合,但非方法函数更通用。正如您看到的,可以将它们用于数组、string对象、STI容器,还可以用它们来处理混合的容器类型,例如,将矢量容器中的数据存储到链表或集合中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具&#xff0c; 底层使用的是Google的Tesseract-OCR 引擎&#xff0c;支持识别图片中的文字&#xff0c;支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…

mac下通过brew安装mysql的环境调试

mac安装mysql 打开终端&#xff0c;运行命令&#xff08;必须已经装过homebrew哦&#xff09;&#xff1a; 安装brewbin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"已安装brew直接运行&#xff1a;brew install mysql8.0报…

洛科威岩棉板在生产生活中广泛应用,以优秀表现实现隔热性能最大化

无论是在住宅领域还是工业生产领域&#xff0c;隔热保温都扮演着极其重要的角色&#xff0c;选用的材料是否足够出色&#xff0c;决定了大家居家生活的舒适度&#xff0c;以及生产过程中能耗的高低。近些年来&#xff0c;洛科威岩棉优秀的隔热性能逐渐得到了各行各业的青睐&…

HomeDepot commercedesk 平台EDI自测流程

Home Depot Canada 是一家全球知名的家居建材零售公司&#xff0c;在加拿大拥有多家分店。它是美国的家居建材零售巨头 Home Depot 在加拿大的子公司。Home Depot 主要销售各种家庭装修和建筑材料&#xff0c;包括工具、家具、装饰品、电器等。公司提供广泛的产品选择和专业的顾…

机器学习(二十四):信息增益、独热编码和回归树

一、纯度测量方式——熵 第一步&#xff0c;定义&#xff1a;一个子集里&#xff0c;某一类别的数据在子集中的占比 例如&#xff0c;下图这组输入数据&#xff0c;根据耳朵形状划分为两个子集&#xff0c;尖耳朵子集里&#xff0c;有四只猫&#xff0c;1只狗。则是4/5 第二步…

Pyppeteer 爬取实战

爬取目标 https://spa2.scrape.center/ 本节工作 遍历每页列表&#xff0c;获取每部电影详情页的 URL 爬取每部电影的详情页&#xff0c; 提取电影名称&#xff0c; 评分&#xff0c;类别&#xff0c;封面&#xff0c;简介等信息 将爬取的数据保存为 JSON数据 准备工作 安…

半监督学习方法的种类

半监督学习方法结合了少量标记数据和大量未标记数据&#xff0c;利用未标记数据来改进模型的性能。以下是几种常见的半监督学习方法&#xff1a; 1. **自训练&#xff08;Self-training&#xff09;**&#xff1a;模型先用少量标记数据进行训练&#xff0c;然后使用这个模型来…

NVIDIA正偷偷复活卡皇泰坦,性能秒杀5090Ti

PC 硬件圈的瓜年年有&#xff0c;但最近似乎格外的多噢&#xff01; 首先针对 13、14 代酷睿 CPU 不稳定问题&#xff0c;Intel 终于做出了正式回应&#xff1a; 他们在对退回的 CPU 进行大量分析后得出&#xff0c;确认是过高的运行电压和微代码算法错误导致了不稳定情况。 …

2-48 基于matlab的EM算法聚类可视化程序

基于matlab的EM算法聚类可视化程序&#xff0c;通过期望最大化算法&#xff08;EM&#xff09;优化类别间距&#xff0c;使得类别间距最大、类内间距最小。输出聚类前后结果及收敛曲线。程序已调通&#xff0c;可直接运行。 2-48 期望最大化算法&#xff08;EM&#xff09; 聚类…

微信小程序教程002:代码结构介绍和新建小程序页面

文章目录 代码介绍1、小程序代码构成2、小程序页面组成部分3、JSON配置文件的作用3.1 app.json文件3.2 project.config.json文件3.3 sitemap.json文件3.4 页面的.json文件 新建小程序页面WXML和WXSS介绍1、什么是WXML2、什么是WXSS 小程序的JS文件1、JS文件2、小程序中JS文件分…

使用abpcli创建项目时提示数据库迁移失败

问题描述 使用abpcli创建项目时提示数据库迁移失败&#xff01; 解决方案&#xff1a; 1、检查数据库连接字符串 {"ConnectionStrings": {"Default": "serverlocalhost;port3306;databaseAcmeBookStore;userroot;passwordyour_password;"} }2、…

你真的会提问吗?如何有效提问?

学会提问&#xff0c;其实就是学会了一种优秀的思维方式&#xff0c;提问的过程&#xff0c;本身就是思考的过程。学会提问&#xff0c;也是我们提升领导力非常重要的一步。 一个又一个优秀的提问&#xff0c;会把我们引向人生巅峰&#xff1b;而低质量的提问&#xff0c;只会…

MySQL数据库的DQL的高级数据查询语句

目录 非等值联查&#xff1a; 等值联查&#xff1a; eg&#xff1a;5张表联查 连接查询——left/right/inner join on eg: 连接查询——union Eg&#xff1a; 不去重的并集——union all 子查询&#xff08;内部查询&#xff09; 1、where型子查询 2、from型子查询&a…

微信小程序之用户登录

用户登录是小程序的一个常用功能&#xff0c;当用户在浏览文章想要收藏时&#xff0c;在线上购买商品时&#xff0c;只有用户登录自己账号以后&#xff0c;才可以进一步使用这些功能。此文论述了小程序用户登录功能的设计流程 一、设计思路 1、界面 小程序界面效果如下所示&…

【Golang 面试 - 基础题】每日 5 题(六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

vue3pinia

pinia 一.pinia的理解及其搭配pinia环境二.使用二.修改数据&#xff08;三种方式&#xff09;三.storeToRefs 目录是store Store 包含了状态&#xff08;state&#xff09;、获取器&#xff08;getters&#xff09;和操作&#xff08;actions&#xff09;,相当于组件中的&#…

web后端--Spring事务管理

事务也要日志配置 !!!!debug前面记得加空格 logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debugrollbackFor 默认情况下&#xff0c;只有出现RunTimeException才会回滚事务&#xff0c;rollbackfor属性用于控制出现何种异常类型&#xff0c;回滚…

Linux shell编程笔记0

一、shell概述 shell是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核。 shell还是一个功能强大的编程语言&#xff0c;易编写、易调试、灵活性强。 二、shell脚本入门 1.进入编辑模式进入到目录下 vi 文件名称如果是system下的文件…

解决MyBatis查询oracle的NCLOB类型都是内存地址字符串

在项目的配置类文件夹中放入如下通用类OracleResultSetInterceptor import org.apache.ibatis.executor.resultset.ResultSetHandler; import org.apache.ibatis.plugin.*;import java.io.IOException; import java.io.Reader; import java.io.StringWriter; import java.sql.…

电子水尺的工作原理

TH-SC24电子水尺&#xff0c;也被称为感应式防汛水尺或水位在线监测仪&#xff0c;是一种专门用于监测河流水域水位变化的高科技设备。它在防汛工作中发挥着至关重要的作用&#xff0c;能够实时、准确地提供水位数据&#xff0c;为防汛决策和应急响应提供有力支持。   工作原…