《C++ Primer Plus》第16章:string类和标准模板库(13)
复习题
-
考虑下面的声明:
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 对象的声明。哪些方法不再需要显式定义?
答:拷贝构造,析构函数和赋值运算符重载不再需要显式定义。 -
在易于使用方面,指出 string 对象至少两个优于C-风格字符串的地方。
答:1. string 对象不需要手动分配内存空间和释放内存空间;2. string对象能够自动调整大小,且传参时,不需要一个额外的表示字符串大小的参数。 -
编写一个函数,用 string 对象作为参数,将 string 对象转换为全部大写。
答:void ToUpper(string & s) {for(int i = 0; i< s.size(); i++){s[i] = toupper(str[i]);} } -
从概念或语法上说,下面哪个不是正确使用 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> -
如果生成一个存储高尔夫球棍(而不是数字)的栈,为何它(从概念上说)是一个坏的高尔夫袋子?
答:因为要取出旧的高尔夫球杆,需要将在它之后放入的所有球杆全部放入才行。 -
为什么说对于逐洞记录高尔夫成绩来说,set 容器是糟糕的选择?
答:因为set 容器要自动对成绩进行排序,不能保证原始的录入数据,而且set不能存储相同的数据。 -
既然指针是一个迭代器,为什么 STL 设计人员没有简单地使用指针来代替迭代器呢?
答:指针具有迭代器所需要的功能。但是对于不同数据容器(比如链表),使用迭代器才能使得接口能够统一按照类似于指针的处理方式来处理数据。 -
为什么 STL 设计人员仅定义了迭代器基类,而使用继承来派生其他迭代器类型的类,并根据这些迭代器来表示算法?
答:STL 方法使得可以将 STL 函数用于指向常规数组的常规指针以及指向 STL 容器类的迭代器,因此提高了通用性。
-
给出 vector 对象比常规数组方便的3个例子。
答: 可以将一个vector对象赋给另一个;vector管理自己的内存,因此可以将元素插入到vector中,并让它自动调整长度;使用 at() 方法,可以自动检查边界。 -
如果下面的程序是使用 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。 -
假设有如下程序所示的函数符 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)
复习题 考虑下面的声明: 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
光的行为 当光和物体相遇时,光会有三种行为:被物体反射、穿过物体(物体是透明或半透明的)或者被吸收。 高光反射和漫反射 高光反射(Specular Reflection)会在表面光滑且反光的物体上看到,比如镜…...
设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解
一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括:布尔类型、浮点类型(float、double、decimal、byte)、字符类型(char)、整型(int、long、short等)、枚举(entum)、结构体(struct)。 引用类型:数组、字符串(string)、类、接口…...
ssm高校功能教室预约系统java idea maven
本网站所实现的是一个高校功能教室预约系统,该系统严格按照需求分析制作相关模块,并利用所学知识尽力完成,但是本人由于学识浅薄,无法真正做到让该程序可以投入市场使用,仅仅简单实现部分功能,希望日后还能…...
C语言学习笔记-强制类型转换
强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型…...
docker数据卷插件
在docker中,对接外部存储我们通常需要docker的数据卷插件。docker中简要可分为两类 docker卷插件和CSI插件,其中docker卷插件分为两个版本,旧版的传统插件(legacy plugin/non-managed plugin)和新版的托管插件(managed plugin)。下面分章节讨…...
第二章-线程(3)
线程一、线程的定义二、线程的实现一、线程的定义 线程: 线程是进程中的一个实体,是系统独立调度和分派的基本单位。 进程是资源的拥有者,线程是系统独立调度和分配的基本单位。 进程与线程的比较: 调度:线程调度快…...
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提供了两个非常方便的方法可以实现碰撞检测:pygame.sprite.groupcollide()两个精灵组中所有的精灵的碰撞检测groupcollide(group1, group2, dokill1, dokill2, collided None) -> Sprite_dict如果将dokill…...
T06 成绩排序
查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 示例: jack 70 peter 96 Tom 70 smith 67 从高到低 成…...
【机器学习】Linear and Nonlinear Regression 线性/非线性回归讲解
文章目录一、回归问题概述二、误差项定义三、独立同分布的假设四、似然函数的作用五、参数求解六、梯度下降算法七、参数更新方法八、优化参数设置一、回归问题概述 回归:根据工资和年龄,预测额度为多少 其中,工资和年龄被称为特征࿰…...
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
伴随着社会以及科学技术的发展,互联网已经渗透在人们的身边,网络慢慢的变成了人们的生活必不可少的一部分,紧接着网络飞速的发展,管理系统这一名词已不陌生,越来越多的学校、公司等机构都会定制一款属于自己个性化的管…...
为什么神经网络做不了2次函数拟合,网上的都是骗人的吗?
环境:tensorflow2 kaggle 这几天突发奇想,用深度学习训练2次函数。先在网上找找相同的资料这方面资料太少了。大多数如下: 。 给我的感觉就是,用深度学习来做,真的很容易。 网上写出代码分析的比较少。但是也找到了…...
【Java】Help notes about JAVA
JAVA语言帮助笔记Java的安装与JDKJava命名规范JAVA的数据类型自动类型转换强制类型转换JAVA的运算符取余运算结果的符号逻辑运算的短路运算三元运算符运算符优先级JAVA的流程控制分支结构JAVA类Scanner类Java的安装与JDK JDK安装网站:https://www.oracle.com/java/…...
2023北京老博会,北京养老展,第十届中国国际老年产业博览会
2023第十届(北京)国际老年产业博览会,将于08月28-30日盛大举办; 2023北京老博会:2023第十届中国(北京)国际老年产业博览会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 数据可以持久化,但是持久化/缓存可以把数据放在内存中,虽然是快速的,但是也是最不可靠的;也可以把数据放在磁盘上,也不是完全可靠的!例如磁盘会损坏等。 Checkpoint的产生就是…...
Connext DDSQoS参考
1 QoS策略列表 ConnextDDS 6.1.1版中所有QoS策略的高级视图。 1. QoS策略描述...
【正则表达式】获取html代码文本内所有<script>标签内容
文章目录一. 背景二. 思路与过程1. 正则表达式中需要限定<script>开头与结尾2. 增加标签格式的限定3. 不限制<script>首尾的内部内容4. 中间的内容不能出现闭合的情况三. 结果与代码四. 正则辅助工具一. 背景 之前要对学生提交的html代码进行检查,在获…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
