C++课后习题(7)

2019-08-30 23:18

博学谷——让IT教学更简单,让IT学习更有效

{ tempCount++; //每参加一个选手,个数加1 //评委打分 deque dscore; //用来存储班委打的分 for (int j = 0; j < 10; j++) //10个评委打分 { int score = 50 + rand() % 50; dscore.push_back(score); } sort(dscore.begin(), dscore.end()); //将dscore容器中的分数排序 dscore.pop_back(); //去除最高分 dscore.pop_front(); //去除最低分 //求平均分 int scoresum = accumulate(dscore.begin(), dscore.end(), 0); //总分 int scoreavg = scoresum / dscore.size(); //平均分 mapSpeaker[*it].score[index] = scoreavg; //将选手得分存入map容器中 multmapGroup.insert(pair(scoreavg, *it)); //得分与选手编号存入到了multmapGroup容器中 //处理分组 if (tempCount % 6 == 0) //如果够6个选手了就分一组 { cout <<\小组成绩:\ for (multimap>::iterator mit = multmapGroup.begin(); mit != multmapGroup.end(); mit++) { //输出顺序:编号姓名得分 cout << mit->second << \选手\\ } //前3名晋级,晋级名单放到v2容器中 while (multmapGroup.size() > 3) //multmapGroup容器是从大到小排序的 { multimap>::iterator it = multmapGroup.begin(); v2.push_back(it->second); //将选手编号存入到v2容器中 multmapGroup.erase(it); //删除it对应的元素,返回下一个元素的位置 } multmapGroup.clear(); //完成之后将些容器清空,下一轮待用 } }

博学谷——让IT教学更简单,让IT学习更有效

return 0; }

//查看比赛结果

int speech_contest_print(int index, vector&v, map&mapSpeaker) { printf(\第%d轮晋级名单:\\n\ for (vector::iterator it = v.begin(); it != v.end(); it++) { cout << \编号:\<< *it << \<<\选手\<< \<< mapSpeaker[*it].score[index] << endl; } return 0; }

int main() { //容器设计 map mapSpeaker; //参加比赛的选手姓名、得分 vector v1; //第1轮比赛的名单 vector v2; //第2轮比赛的名单 vector v3; //第3轮比赛的名单 vector v4; //第4轮比赛的名单 //设计流程 //产生选手,得到第一轮选手的比赛名单 GenSpeaker(mapSpeaker, v1); //第1轮选手抽签查看比赛结果 cout << \按任意键开始第1轮比赛:\ cin.get(); speech_contest_draw(v1); //v1中存储的是第1轮选手的名单 speech_contest(0, v1, mapSpeaker, v2); speech_contest_print(0, v2, mapSpeaker); //第2轮选手抽签查看比赛结果 cout << \按任意键开始第2轮比赛:\ cin.get(); speech_contest_draw(v2); speech_contest(1, v2, mapSpeaker, v3); speech_contest_print(1, v3, mapSpeaker);

博学谷——让IT教学更简单,让IT学习更有效 }

//第3轮选手抽签查看比赛结果

cout << \按任意键开始第3轮比赛:\cin.get();

speech_contest_draw(v3);

speech_contest(2, v3, mapSpeaker, v4); speech_contest_print(2, v4, mapSpeaker); system(\return 0;

第九章题目

一、填空题

1、模式可以将产品进行分类,每个工厂生产一类产品,提高了程序效率。

2、在C++11之间,auto默认修饰的。auto是根据表达式结果推导出变量类型,则使用auto时变量必须被。

3、C++11新标准中,使用完成数据初始化,称为列表初始化。

4、要解决由同一模板实例化出多个同类型函数的冗余问题,可以使用。 二、选择题

5、下列选项中,哪一项不是设计模式的分类()。 A、创建型模式 B、结构型模式 C、行为型模式 D、静态型模式

6、以下选项中哪个描述了迭代器模式的特点()。 A、使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 B、用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

C、提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示 D、运用共享技术有效地支持大量细粒度的对象 7、简单工厂模式包含以下哪几个部分()

A、抽象工厂:工厂类的基类,提供工厂的公共操作接口。 B、具体工厂:简单工厂模式的核心,用来生产具体产品

C、抽象产品:具体产品类的基类,负责提供产品操作的公共接口 D、具体产品:是抽象产品的具体实现,描述不同产品的具体信息 8、下列关于右值引用的描述中,正确的是() A、右值引用是C++11引入的新引用类型

B、右值引用的作用是对将要销毁的对象信息进行保留 C、右值引用用“&&”运算符来定义

D、右值引用的一个重要特性就是能够绑定到一个将要销毁的对象 9、下列lambda表达式的定义形式中,正确的选项是()。 A、(参数列表) [捕获列表]->返回值类型 { 函数体 }

博学谷——让IT教学更简单,让IT学习更有效 B、返回值类型 (参数列表) [捕获列表] { 函数体 } C、[捕获列表](参数列表)->返回值类型 { 函数体 } D、以上均不正确 三、判断题

10、迭代器模式分离了聚合对象的遍历行为,这样既可以不暴露聚合类型的内部结构,又可

以让外部透明地操作聚合类型对象。 11、在C++11中,使用关键字nullptr来代替空指针,nullptr可以隐式转换为bool型(取值为false)和整型。

12、限定作用域的枚举类型定义的枚举成员在枚举类型作用域外不可访问。

13、委托构造函数体中的语句在目标构造函数完全执行后才被执行。目标构造函数体中的局

部变量不在委托构造函数体中起作用。 四、简答题

14、请总结一下lambda表达式的几种捕获列表形式。 15、请根据下面的UML图,实现迭代器模式。

AggregateclientIterator+First()+Next()+IsDone()+CurrentItem()ConcreteAggregate+CreateIterator()ConcreteIteratorreturn new ConcreteIterator(this)

第九章答案

1、抽象工厂 2、局部变量 3、{}

4、外部模板 5、C 6、C 7、ABCD 8、ABCD 9、C 10、对 11、错 12、对

初始化

博学谷——让IT教学更简单,让IT学习更有效

13、对 14、

1)[]:空捕获列表,表示lambda表达式不使用所在函数的任何变量。

2) [变量列表]:变量列表是用逗号分隔的lambda表达式所在函数的多个局部变量,默认情况下,捕获列表中所有变量均对函数局部变量进行拷贝,若变量名称前使用了&,则采用引用方式捕获。

3) [&]:隐式捕获列表,表示采用引用方式使用lambda表达式所在函数的局部变量。 4) [=]:隐式捕获列表,采用值捕获方式使用所在函数的局部变量。

5) [&, 变量列表]:变量列表中包含0个或多个lambda表达式所在函数的变量,对这些变量将采用值捕获方式进行操作,函数中其他的变量将采用引用捕获方式进行操作。

6) [=, 变量列表]:变量列表中包含0个或多个lambda表达式所在函数的变量,对这些变量将采用引用捕获方式进行操作,函数中其他的变量将采用值捕获方式进行操作。 15、

#include #include using namespace std;

template class Iterator {

public: virtual void first() = 0; virtual void next() = 0; virtual Item* currentItem() = 0; virtual bool isDone() = 0; virtual ~Iterator(){} };

template class ConcreteAggregate;

template

class ConcreteIterator : public Iterator { ConcreteAggregate * aggr; int cur; public: ConcreteIterator(ConcreteAggregate*a) :aggr(a), cur(0){} virtual void first() { cur = 0; } virtual void next() {


C++课后习题(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:夏令营开营仪式学生代表发言

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: