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

【C++ Primer Plus习题】16.10

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

问题:

在这里插入图片描述

解答:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <memory>
using namespace std;

struct Review
{
	string title;
	int rating;
	int price;
};

bool operator<(const shared_ptr<Review>& p1, const shared_ptr<Review>& p2);
bool FillReview(Review& rr);
void ShowReview(const shared_ptr<Review>& p);
bool worseThan(const shared_ptr<Review>& p1, const shared_ptr<Review>& p2);
bool expenThan(const shared_ptr<Review>& p1, const shared_ptr<Review>& p2);


int main()
{
	vector<shared_ptr<Review>>books;
	Review temp;
	while (FillReview(temp))
	{
		shared_ptr<Review>pd(new Review(temp));
		books.push_back(pd);
	}
	if (books.size() > 0)
	{
		cout << "Choose the way to sort: "
			<< "r:rate, s: rate r, p:price, d:price, d:price r, q:quit\n";
		char choice;
		while (cin >> choice && choice != 'q')
		{
			switch (choice)
			{
			case 'r':sort(books.begin(), books.end(), worseThan);
				break;
			case 's':sort(books.rbegin(), books.rend(), worseThan);
				break;
			case 'p':sort(books.begin(), books.end(), expenThan);
				break;
			case 'd':sort(books.rbegin(), books.rend(), expenThan);
				break;
			default:
				break;
			}
			for_each(books.begin(), books.end(), ShowReview);
			cout<<"Please choose the way to sort: "
				<< "r:rate, s: rate r, p:price, d:price, d:price r, q:quit\n";
		}
		
	}

	return 0;
}


bool operator<(const shared_ptr<Review>& p1, const shared_ptr<Review>& p2)
{
	if (p1->title < p2->title)
		return true;
	else if (p1->title == p2->title && p1->rating < p2->rating)
		return true;
	else
		return false;
}
bool FillReview(Review& rr)
{
	cout << "Enter book title (quit to quit): ";
	getline(cin, rr.title);
	if (rr.title == "quit" || rr.title == "")
		return false;
	cout << "Enter book rating: ";
	cin >> rr.rating;
	if (!cin)
		return false;
	cout << "Enter book price: ";
	cin >> rr.price;
	if (!cin)
		return false;
	while (cin.get() != '\n')
	{
		continue;
	}
	return true;
}
void ShowReview(const shared_ptr<Review>& p)
{
	cout << p->rating << "\t" << p->title << "\t" << p->price << endl;
}
bool  worseThan(const shared_ptr<Review>& p1, const shared_ptr<Review>& p2)
{
	if (p1->rating < p2->rating)
		return true;
	else
		return false;
}
bool expenThan(const shared_ptr<Review>& p1, const shared_ptr<Review>& p2)
{
	if (p1->price < p2->price)
		return true;
	else
		return false;
}

运行结果:
在这里插入图片描述

考查点:

  • vector容器
  • 智能指针
  • sort()
  • 迭代器
  • for_each()

2024年9月20日21:49:47


http://www.kler.cn/a/312885.html

相关文章:

  • pycharm快速更换虚拟环境
  • 吾店云介绍 – 中国人的WordPress独立站和商城系统平台
  • 使用Git工具在GitHub的仓库中上传文件夹(超详细)
  • uniapp的基本使用(easycom规范和条件编译)和uview组件的安装和使用
  • git修改当前分支名称并推送到远程仓库
  • 异步提交Django
  • MAC 安装 nvm
  • 【SpringCloud】服务注册与发现 - Eureka
  • windows10部署ChatTTS+Apifox调用
  • NAT和代理服务
  • 【ppt2svg svg2png/jpg】ppt转图片解决方案
  • 安全基础学习-AES128加密算法
  • 深度学习——管理模型的参数
  • 计算机毕业设计 沉浸式戏曲文化体验系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • TinkerTool System for Mac实用软件系统维护工具
  • 单片机项目合集列表——Excel合集列表目录查阅(持续更新)
  • JavaScript 基于生成器的异步编程方案相关代码分享
  • Git之误执行git rm -r解决方案(六十七)
  • 开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势(一)
  • uniapp+renderJS+google map开发安卓版APP非小程序
  • 新通话,新突破!菊风荣获第七届“绽放杯”5G消息与新通话专题赛二等奖!
  • C++可变参数模板
  • 尚硅谷javaweb笔记
  • c++的decltype关键字
  • Go进阶概览 -【第6章 Go程序的性能优化与调优】
  • CertiK因发现Apple Vision Pro眼动追踪技术漏洞,第6次获苹果认可