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

news/2023/10/4 0:38:25

复习题

  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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自建屏幕字段双击功能1

---恢复内容开始--- 业务背景&#xff1a; 有时候我们可能对自建屏幕上的字段要进行双击操作&#xff0c;要触发自建屏幕的双击需要设置一些东西&#xff0c;本文将介绍一种触发自建屏幕字段双击的例子。 解决步骤 新建一个程序&#xff0c;然后再新建一个屏幕&#xff0c;注意…

物料外部编码的模糊查询-MGV_SELOP_AFTER_START_OF_SEL

我们知道SE11或SE16N中并不支持物料外部编码的模糊查询&#xff0c;比如&#xff1a;se11中模糊查询64771-062-*找不到符合条件的数据&#xff0c; &amp;lt;img class"alignnone size-full wp-image-6928" src"http://www.baidusap.com/wp-content/uploads/…

Smart form与Adobe form 如何通过转换后的function名字获得form名字

大多数小伙伴一定知道smart form(Transaction: smartforms) 和 adobe form(Transaction: SFP) 实际上是一个function module。 &amp;lt;img class"size-medium wp-image-6899" src"http://www.baidusap.com/wp-content/uploads/WeChat-Screenshot_201907241…

维护设备的库存信息-SERIAL_EQBS_POST

有个需求要维护设备的库存信息&#xff0c;也就是IE02序列化tab页中红框内的字段&#xff0c;比如库存类型&#xff0c;工厂&#xff0c;库存批次&#xff0c;客户&#xff0c;供应商等信息&#xff0c;如下&#xff1a; &amp;lt;img class"alignnone size-full wp-im…

[BAPI]读取设备用户状态和系统状态-BAPI_EQUI_GETSTATUS

可以使用标准bapi BAPI_EQUI_GETSTATUS来获取设备的用户状态和系统状态。 &amp;lt;img class"alignnone size-full wp-image-6875" src"http://www.baidusap.com/wp-content/uploads/2019-07-23_14-02-05.jpg" alt"" width"702" h…

SE16N 添加修改、删除表数据权限

1. Goto SE16N 2. Input &SAP_EDIT in command field, and press ENTER 3. 直接删除不需要的数据 注意&#xff1a;&SAP_EDIT方法在产品版本EHP5之后不好用&#xff0c;SAP通过一个notes取消了&SAP_EDIT功能。 产品版本可以在系统状态中找到。 &amp;lt;img cla…

物料内部编码和外部编码对应关系保存在表MATERIALID中

SAP中的物料编码有内部编码和外部编码之分&#xff0c;它们之间的对照关系保存在表MATERIALID中。 其中&#xff0c;MATNR_INT是内部编码&#xff0c;MATNR_EXT是40位的外部长物料编号。 &amp;lt;img class"alignnone size-medium wp-image-6696" src"http:…

[问题解决]创建预制发票(BAPI_INCOMINGINVOICE_PARK)时报错”采购凭证的帐户设置00不存在”...

1&#xff0c;问题描述 调用bapi BAPI_INCOMINGINVOICE_PARK创建预制发票时&#xff0c;报了个错误"采购凭证的帐户设置00不存在"&#xff0c; 消息类ME&#xff0c;消息编号715. &amp;lt;img class"alignnone size-full wp-image-6609" src"htt…

一种内表转XML的方法step by ste

业务背景&#xff1a; 在与其他外部系统的对接过程中&#xff0c;主要推荐的是JSON的数据格式&#xff0c;但是有的系统因为历史原因或管理要求上的原因&#xff0c;会要求使用XML的格式进行数据交换。本文档将介绍一种XML与SAP内表转换的方法。 1&#xff0c;内表转XML 1.首先…

如何判断暂存采购订单(EKKO-MEMORY)

ME21N创建采购订单时&#xff0c;可以通过点击暂存按钮将PO保存成暂存订单。 &amp;lt;img class"alignnone size-full wp-image-6557" src"http://www.baidusap.com/wp-content/uploads/2019-06-21_11-09-23.jpg" alt"" width"454"…

[问题解决]调用BAPI_ACC_DOCUMENT_POST时报错“被合并的公司 XXXX 和 XXXX 是不同的”...

1&#xff0c;问题描述 调用BAPI_ACC_DOCUMENT_POST或者BAPI_ACC_DOCUMENT_CHECK时 创建或检查凭证时&#xff0c;报错“被合并的公司 xxxx 和 xxxx 是不同的”&#xff0c;比如“被合并的公司 3001 和 9999 是不同的”。 错误消息ID&#xff1a; F5 消息号&#xff1a;080 &am…

如何删除或更改已经释放的TR

下面介绍一个方法删除或修改在SAP系统内已经释放的传输请求TR。 1&#xff0c;修改TR状态 SE38运行RDDIT076程序&#xff0c;将TR的状态由已释放R修改为可修改的D状态。 首先有个已经释放的TR &amp;lt;img class"alignnone size-full wp-image-6497" src"ht…

[问题解决]使用mpur_message_forced时,校验消息添加到错误的采购订单行项目上

1&#xff0c;问题描述 在BADI ME_PROCESS_PO_CUST的方法CHECK中增强&#xff0c;增加对采购订单行项目的校验&#xff0c;发现使用宏mpur_message_forced添加错误消息时&#xff0c;这些错误消息只能显示到采购订单的最后一行上&#xff0c;并不能按照行项目归集显示。 增强点…

检查用户是否存在[SUSR_USER_READ_CHECKS]

可以使用函数 SUSR_USER_READ_CHECKS来做用户存在检查。 SE37测试一下&#xff0c;在用户字段user_name输入Baidusap后运行&#xff0c;提示用户不存在 &amp;lt;img class"alignnone size-full wp-image-6475" src"http://www.baidusap.com/wp-content/uplo…

如何将JSON转换为HTML格式并显示

ABAP接口程序开发中时常会用到JSON格式来传输数据&#xff0c;在监控传输的JSON串内容时&#xff0c;把JSON转换为HTML格式来显示会很便利。 下面提供一个简单例子来实现JSON转化为HTML并显示的功能。 其中&#xff1a; 1&#xff0c;使用 /ui2/cl_json>serialize来生成JSON…

[问题解决]开启了adsubcon调用BAPI_GOODSMVT_CREATE创建物料凭证时第一行批次错误

1&#xff0c;问题描述 项目里使用了ADSUBCON&#xff0c;在调用BAPI_GOODSMVT_CREATE创建带subcontractor行项目的物料移动凭证时&#xff0c;发现主行项目中的批次赋值错误。 错误截图&#xff1a; 看到第一行&#xff0c;也就是物料移动类型是101的行项目上的批次是12082215…

采购申请科目分配校验增强-MEREQ001-EXIT_SAPLMEREQ_010

1&#xff0c;MEREQ001 用户出口(user-exit)MEREQ001是针对采购申请的增强&#xff0c;其中FM EXIT_SAPLMEREQ_010可以对采购申请的账户分配进行校验。 &amp;amp;lt;img class"alignnone size-full wp-image-6442" src"http://www.baidusap.com/wp-content/…

如何查找CDHDR/CDPOS表中的对象类(OBJECTCLAS)、对象值(OBJECTID)

众所周知&#xff0c;更改凭证抬头表CDHDR和更改凭证项目表CDPOS中保存了SAP中业务数据的创建和变更历史。 但是在查询这两个表时&#xff0c;通常会面临不知道如何填写OBJECTCLAS和OBJECTID这两个字段的值。 &amp;lt;img class"alignnone size-medium wp-image-6430&…

SAP系统内如何查询特定时间内某个Tcode都修改了什么-AUT10

AUT10是审计时使用的一个Tcode &#xff0c;可以用来查找特定时间内&#xff0c;某个tcode都修改了什么内容&#xff0c;包括更改的表、字段、修改时间、修改人、更改凭证对象、对象值等等。 AUT10界面如下&#xff0c;输入Tcode&#xff0c;开始和截止日期之后运行&#xff0c…

[问题解决]websevice调用中ICM_HTTP_SSL_PEER_CERT_UNTRUSTED错误解决

1&#xff0c;问题描述 SAP 调用webservice时发生一个错误ICM_HTTP_SSL_PEER_CERT_UNTRUSTED SRT&#xff1a;Processing error in Internet Communication Framework&#xff1a;("ICM_HTTP_SSL_PEER_CERT_UNTRUSTED") &amp;lt;img class"alignnone size-m…
最新文章