当前位置: 首页 > news >正文

《C++ Primer Plus》第16章:string类和标准模板库(13)

复习题

  1. 考虑下面的声明:

    class RQ1{
    private:char *st;	// pointer to C-style string
    public:RQ1() { st = new char [1];strcpy(st, "");}RQ1(const char * s) {st = new char [strlen(s)+1];strcpy(st, s);}RQ1(const RQ1 & rq) {st = new char[strlen(rq.st)+1];strcpy(st, rq.st);}~RQ1() {delete [] st;}RQ & operator=(const RQ & rq);// more stuff
    };
    

    将它转换为使用string 对象的声明。哪些方法不再需要显式定义?
    答:拷贝构造,析构函数和赋值运算符重载不再需要显式定义。

  2. 在易于使用方面,指出 string 对象至少两个优于C-风格字符串的地方。
    答:1. string 对象不需要手动分配内存空间和释放内存空间;2. string对象能够自动调整大小,且传参时,不需要一个额外的表示字符串大小的参数。

  3. 编写一个函数,用 string 对象作为参数,将 string 对象转换为全部大写。
    答:

    void ToUpper(string & s) {for(int i = 0; i< s.size(); i++){s[i] = toupper(str[i]);}
    }
    
  4. 从概念或语法上说,下面哪个不是正确使用 auto_ptr 的方法(假设已经包含了所需的头文件)?
    答:

    auto_ptr<int> pia(new int[20]);	// wrong, use with new, not new[]
    auto_ptr<string> (new string);	// wrong, no name for pointer
    int rigue = 7;
    auto_ptr<int>pr(&rigue);		// wrong, memory not allocated by new
    auto_ptr dbl (new double);		// wrong, omits <double>
    
  5. 如果生成一个存储高尔夫球棍(而不是数字)的栈,为何它(从概念上说)是一个坏的高尔夫袋子?
    答:因为要取出旧的高尔夫球杆,需要将在它之后放入的所有球杆全部放入才行。

  6. 为什么说对于逐洞记录高尔夫成绩来说,set 容器是糟糕的选择?
    答:因为set 容器要自动对成绩进行排序,不能保证原始的录入数据,而且set不能存储相同的数据。

  7. 既然指针是一个迭代器,为什么 STL 设计人员没有简单地使用指针来代替迭代器呢?
    答:指针具有迭代器所需要的功能。但是对于不同数据容器(比如链表),使用迭代器才能使得接口能够统一按照类似于指针的处理方式来处理数据。

  8. 为什么 STL 设计人员仅定义了迭代器基类,而使用继承来派生其他迭代器类型的类,并根据这些迭代器来表示算法?

    答:STL 方法使得可以将 STL 函数用于指向常规数组的常规指针以及指向 STL 容器类的迭代器,因此提高了通用性。

  9. 给出 vector 对象比常规数组方便的3个例子。
    答: 可以将一个vector对象赋给另一个;vector管理自己的内存,因此可以将元素插入到vector中,并让它自动调整长度;使用 at() 方法,可以自动检查边界。

  10. 如果下面的程序是使用 list(而不是 vector)实现的,则该程序的哪些部分将是非法的?非法部分能够轻松修复吗?如果可以,如何修复呢?

    // vect3.cpp -- using STL functions
    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>struct Review{std::string title;int rating;
    };bool operator<(const Review & r1, const Review & r2);
    bool worseThan(const Review & r1, const Review & r2);bool FillReview(Review & rr);
    void ShowReview(const Review & rr);int main(){using namespace std;vector<Review> books;Review temp;while (FillReview(temp)){books.push_back(temp);}if(books.size()>0){cout << "Thanke you. You entered the following "<< books.size() << " ratings:\n"<< "Rating\tBook\n";for_each(books.begin(), books.end(), ShowReview);sort(books.begin(), books.end());cout << "Sorted by title:\nRating\tBook\n";for_each(books.begin(),books.end(),ShowReview);sort(books.begin(), books.end(), worseThan);cout << "Sorted by rating:\nRating\tBook\n";for_each(books.begin(), books.end(), ShowReview);random_shuffle(books.begin(), books.end());cout << "After shuffling:\nRating\tBook\n";for_each(books.begin(), books.end(), ShowReview);}else{cout << "No entries. ";}cout << "Bye.\n";return 0;
    }bool operator<(const Review & r1, const Review & r2){if (r1.title < r2.title){return true;}else if (r1.title == r2.title && r1.rating < r2.rating){return true;}else{return false;}
    }bool worseThan(const Review & r1, const Review & r2){if (r1.rating < r2.rating){return true;}else{return false;}
    }bool FillReview(Review & rr){std::cout << "Enter book title (quit to quit): ";std::getline(std::cin, rr.title);if(rr.title=="quit"){return false;}std::cout << "Enter book rating: ";std::cin >> rr.rating;if (!std::cin){return false;}// get rid of rest of input linewhile(std::cin.get() != '\n'){continue;}return true;
    }void ShowReview(const Review & rr){std::cout << rr.rating << "\t" << rr.title << std::endl;
    }

    答:sort函数非法,可以改成使用list的成员sort()方法;
    random_shuffle()非法,因为list不支持随机访问迭代器,可以先将list的内容复制到一个vector中,打乱后在复制回list。

  11. 假设有如下程序所示的函数符 TooBig,下面的带啊吗有何功能?赋给 bo 的是什么值?

    bool bo = TooBig<int>(10)(15);
    
    // functor.cpp -- using a functor
    #include <iostream>
    #include <list>
    #include <iterator>
    #include <algorithm>template<class T> // functor class defines operator()()
    class TooBig{
    private:T cutoff;
    public:TooBig(const T & t) : cutoff(t) {}bool operator()(const T & v) { return v > cutoff; }
    };void outint(int n) { std::cout << n << " ";}int main(){using std::list;using std::cout;using std::endl;TooBig<int> f100(100);  // limit = 100int vals[10] = {50, 100, 90, 180, 60, 210, 415, 88, 188, 201};list<int> yadayada(vals, vals+10); // range constructorlist<int> etcetera(vals, vals+10);// C++11 cna use the following instead// list<int> yadayada = {50, 100, 90, 180, 60, 210, 415, 88, 188, 201};// list<int> etcetera {50, 100, 90, 180, 60, 210, 415, 88, 188, 201};cout << "Original lists:\n";for_each(yadayada.begin(), yadayada.end(), outint);cout << endl;std::for_each(etcetera.begin(), etcetera.end(), outint);cout << endl;yadayada.remove_if(f100);etcetera.remove_if( TooBig<int> (200));cout << "Trimmed lists:\n";for_each(yadayada.begin(), yadayada.end(), outint);cout << endl;for_each(etcetera.begin(), etcetera.end(), outint);cout << endl;return 0;
    }
    

    答:该代码将 15 和 10 比较大小,返回 15 > 10? 结果为 true。

相关文章:

《C++ Primer Plus》第16章:string类和标准模板库(13)

复习题 考虑下面的声明&#xff1a; class RQ1{ private:char *st; // pointer to C-style string public:RQ1() { st new char [1];strcpy(st, "");}RQ1(const char * s) {st new char [strlen(s)1];strcpy(st, s);}RQ1(const RQ1 & rq) {st new char[strlen…...

材质笔记 - Simluate Solid Surface

光的行为 当光和物体相遇时&#xff0c;光会有三种行为&#xff1a;被物体反射、穿过物体&#xff08;物体是透明或半透明的&#xff09;或者被吸收。 高光反射和漫反射 高光反射&#xff08;Specular Reflection&#xff09;会在表面光滑且反光的物体上看到&#xff0c;比如镜…...

设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解

一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括&#xff1a;布尔类型、浮点类型(float、double、decimal、byte)、字符类型(char)、整型&#xff08;int、long、short等&#xff09;、枚举(entum)、结构体(struct)。 引用类型&#xff1a;数组、字符串(string)、类、接口…...

ssm高校功能教室预约系统java idea maven

本网站所实现的是一个高校功能教室预约系统&#xff0c;该系统严格按照需求分析制作相关模块&#xff0c;并利用所学知识尽力完成&#xff0c;但是本人由于学识浅薄&#xff0c;无法真正做到让该程序可以投入市场使用&#xff0c;仅仅简单实现部分功能&#xff0c;希望日后还能…...

C语言学习笔记-强制类型转换

强制类型转换是通过类型转换运算来实现的。其一般形式为&#xff1a;&#xff08;类型说明符&#xff09;&#xff08;表达式&#xff09;其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型…...

docker数据卷插件

在docker中&#xff0c;对接外部存储我们通常需要docker的数据卷插件。docker中简要可分为两类 docker卷插件和CSI插件&#xff0c;其中docker卷插件分为两个版本&#xff0c;旧版的传统插件(legacy plugin/non-managed plugin)和新版的托管插件(managed plugin)。下面分章节讨…...

第二章-线程(3)

线程一、线程的定义二、线程的实现一、线程的定义 线程&#xff1a; 线程是进程中的一个实体&#xff0c;是系统独立调度和分派的基本单位。 进程是资源的拥有者&#xff0c;线程是系统独立调度和分配的基本单位。 进程与线程的比较&#xff1a; 调度&#xff1a;线程调度快…...

C++学习记录——칠 类和对象(4)

文章目录1、const成员2、取地址及const取地址操作符重载3、构造函数续集1、初始化列表2、explicit关键字4、static成员5、匿名对象6、友元1.友元函数2、友元类7、内部类1、const成员 看一段代码 class A { public:void Print(){cout << _a << endl;} private:int…...

Python-项目实战--飞机大战-碰撞检测(8)

目标了解碰撞检测方法碰撞实现1.了解碰撞检测方法pygame提供了两个非常方便的方法可以实现碰撞检测&#xff1a;pygame.sprite.groupcollide()两个精灵组中所有的精灵的碰撞检测groupcollide(group1, group2, dokill1, dokill2, collided None) -> Sprite_dict如果将dokill…...

T06 成绩排序

查找和排序 题目&#xff1a;输入任意&#xff08;用户&#xff0c;成绩&#xff09;序列&#xff0c;可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 示例&#xff1a; jack 70 peter 96 Tom 70 smith 67 从高到低 成…...

【机器学习】Linear and Nonlinear Regression 线性/非线性回归讲解

文章目录一、回归问题概述二、误差项定义三、独立同分布的假设四、似然函数的作用五、参数求解六、梯度下降算法七、参数更新方法八、优化参数设置一、回归问题概述 回归&#xff1a;根据工资和年龄&#xff0c;预测额度为多少 其中&#xff0c;工资和年龄被称为特征&#xff0…...

PyQt5数据库开发1 4.1 SQL Server 2008 R2如何开启数据库的远程连接

文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服务器 4 设置sa用户属性 5 配置服务器 6 重新登录 7 配置SSCM 8 确认防火墙设置 注意事项 前言 SQL Server 2008 R2如何开启数据库的远程连接 SQL Server 2008默认是不允许远程连…...

javassm高校学生评教系统的设计与实现idea msyql

伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个性化的管…...

为什么神经网络做不了2次函数拟合,网上的都是骗人的吗?

环境&#xff1a;tensorflow2 kaggle 这几天突发奇想&#xff0c;用深度学习训练2次函数。先在网上找找相同的资料这方面资料太少了。大多数如下&#xff1a; 。 给我的感觉就是&#xff0c;用深度学习来做&#xff0c;真的很容易。 网上写出代码分析的比较少。但是也找到了…...

【Java】Help notes about JAVA

JAVA语言帮助笔记Java的安装与JDKJava命名规范JAVA的数据类型自动类型转换强制类型转换JAVA的运算符取余运算结果的符号逻辑运算的短路运算三元运算符运算符优先级JAVA的流程控制分支结构JAVA类Scanner类Java的安装与JDK JDK安装网站&#xff1a;https://www.oracle.com/java/…...

2023北京老博会,北京养老展,第十届中国国际老年产业博览会

2023第十届&#xff08;北京&#xff09;国际老年产业博览会&#xff0c;将于08月28-30日盛大举办&#xff1b; 2023北京老博会&#xff1a;2023第十届中国&#xff08;北京&#xff09;国际老年产业博览会The 2023 tenth China (Beijing) International Aged industry Expo&a…...

C++展开模板参数包、函数参数包-(lambda+折叠表达式)

开门见山 以下代码可展开模板参数包和展开函数参数包。 // lambda折叠表达式(需C17) #include <iostream> using namespace std;// 1.展开模板参数包 template<typename ...T> void Func1() {([]() {cout << typeid(T).name() << endl;}(), ...);// …...

【Spark分布式内存计算框架——Spark Core】7. RDD Checkpoint、外部数据源

第五章 RDD Checkpoint RDD 数据可以持久化&#xff0c;但是持久化/缓存可以把数据放在内存中&#xff0c;虽然是快速的&#xff0c;但是也是最不可靠的&#xff1b;也可以把数据放在磁盘上&#xff0c;也不是完全可靠的&#xff01;例如磁盘会损坏等。 Checkpoint的产生就是…...

Connext DDSQoS参考

1 QoS策略列表 ConnextDDS 6.1.1版中所有QoS策略的高级视图。 1. QoS策略描述...

【正则表达式】获取html代码文本内所有<script>标签内容

文章目录一. 背景二. 思路与过程1. 正则表达式中需要限定<script>开头与结尾2. 增加标签格式的限定3. 不限制<script>首尾的内部内容4. 中间的内容不能出现闭合的情况三. 结果与代码四. 正则辅助工具一. 背景 之前要对学生提交的html代码进行检查&#xff0c;在获…...

SEO_全面介绍SEO从入门到精通的关键知识点

<h2>什么是SEO&#xff1f;</h2> <p>SEO&#xff08;Search Engine Optimization&#xff0c;搜索引擎优化&#xff09;是一套通过优化网站内容和结构&#xff0c;以提高其在搜索引擎结果页面&#xff08;SERP&#xff09;中的自然排名的技术和策略。SEO不仅…...

HunyuanVideo-Foley效果展示:AI生成ASMR触发音、白噪音与专注背景音

HunyuanVideo-Foley效果展示&#xff1a;AI生成ASMR触发音、白噪音与专注背景音 1. 核心能力概览 HunyuanVideo-Foley是一款专为音效生成优化的AI模型&#xff0c;能够根据文字描述自动生成高质量的音频内容。基于RTX 4090D 24GB显存深度优化&#xff0c;该镜像提供了开箱即用…...

电商数据采集API接口||合规优先、稳定高效、数据精准

一、API 类型选型&#xff08;先选对&#xff0c;再做对&#xff09;优先按 “官方 → 第三方聚合 → 自建” 顺序选择&#xff0c;平衡合规、成本与效率&#xff1a;表格API 类型代表平台核心优势适用场景注意事项官方开放 API淘宝 TOP、京东万象、拼多多开放平台、亚马逊 SP-…...

SolidWorks2021设计库隐藏技巧:如何自定义Toolbox标准件库满足企业需求

SolidWorks 2021企业级Toolbox深度定制&#xff1a;打造标准化设计引擎 在企业级机械设计环境中&#xff0c;标准化程度直接决定了团队协作效率和设计质量。SolidWorks 2021的Toolbox功能远不止是一个标准件库&#xff0c;当经过深度定制后&#xff0c;它能成为企业设计流程的中…...

零基础玩转Llama-3.2-3B:Ollama部署+实战问答全流程

零基础玩转Llama-3.2-3B&#xff1a;Ollama部署实战问答全流程 1. 模型介绍与准备 1.1 Llama-3.2-3B模型概述 Llama-3.2-3B是Meta公司开发的多语言大型语言模型&#xff08;LLM&#xff09;&#xff0c;属于Llama 3.2系列中的3B参数版本。这个纯文本模型经过指令微调优化&am…...

Phi-4-Reasoning-Vision开源模型:Phi-4-reasoning-vision-15B双卡推理镜像详解

Phi-4-Reasoning-Vision开源模型&#xff1a;Phi-4-reasoning-vision-15B双卡推理镜像详解 1. 项目概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具&#xff0c;专为双卡RTX 4090环境优化设计。这个工具严格遵循官方SYSTE…...

如何高效访问优质内容?bypass-paywalls-chrome-clean工具全方位使用指南

如何高效访问优质内容&#xff1f;bypass-paywalls-chrome-clean工具全方位使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;大量优质内容被…...

终极指南:如何为Zotero 6.0安装完美夜间模式插件,告别深夜阅读疲劳

终极指南&#xff1a;如何为Zotero 6.0安装完美夜间模式插件&#xff0c;告别深夜阅读疲劳 【免费下载链接】zotero-night Night theme for Zotero UI and PDF 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-night 还在为深夜阅读文献时刺眼的屏幕光线而烦恼吗&a…...

重构直播互动体验:BLiveChat的跨平台弹幕解决方案

重构直播互动体验&#xff1a;BLiveChat的跨平台弹幕解决方案 【免费下载链接】blivechat 用于OBS的仿YouTube风格的bilibili直播评论栏 项目地址: https://gitcode.com/gh_mirrors/bl/blivechat BLiveChat作为一款开源的B站直播弹幕工具&#xff0c;通过仿YouTube风格的…...

为什么3分钟搞懂AI

炒又幕燃、RedisShake 核心介绍 RedisShake 是阿里云 Tair 开源团队推出的轻量级Redis数据处理工具&#xff0c;无需复杂依赖&#xff0c;部署简单、操作便捷&#xff0c;能适配自建Redis、云Redis等多种环境&#xff0c;解决Redis全生命周期的数据管理难题。 1.1 四大核心功能…...