15.8节练习
2016-06-24 18:40
567 查看
练习15.28 定义一个存放Quote对象的vector,将Bulk_quote对象传入其中。计算vector中所有元素的net_price。
#include <iostream>
#include <vector>
#include "Quote.h"
using namespace std;
int main()
{
vector<Quote> Qvec;
Bulk_Quote b1("c++", 90, 5, 0.1);
Bulk_Quote b2("c", 50, 5, 0.1);
Qvec.push_back(b1);
Qvec.push_back(b2);
double sum = 0.0;
for (auto &i : Qvec) {
sum += i.net_price(10);
}
cout << sum << endl;
}
调用的是Quote中的net_price版本,不打折的。
15.29 再运行一次你的程序,这次传入Quote对象的shared_ptr。如果这次计算出的总额与之前的程序不一致,解释为什么,如果一致,也请说明理由。
#include <iostream>
#include <vector>
#include <memory>
#include "Quote.h"
using namespace std;
int main()
{
vector<shared_ptr<Quote>> basket;
auto p1 = make_shared<Bulk_Quote> ("c++", 90,5,0.1);
auto p2 = make_shared<Bulk_Quote>("c", 50, 5, 0.1);
basket.push_back(p1);
basket.push_back(p2);
double sum = 0.0;
for (auto &i : basket) {
sum += i->net_price(10);
}
cout << sum << endl;
}此次调用的是Bulk_quote中的net_price版本。
练习15.30 编写你自己的Baseket类,用它计算上一个练习中交易记录的总价格。
#include <iostream>
#include <memory>
#include <set>
#include "Quote.h"
using namespace std;
class Basket {
public:
double total_recepit(std::ostream &)const;
void add_item(const Quote &sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
void add_item(Quote &&sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
private:
static
bool compare(const std::shared_ptr<Quote> &lhs, const std::shared_ptr<Quote> &rhs)
{
return lhs->isbn() < rhs->isbn();
}
std::multiset<shared_ptr<Quote>, decltype(compare)*> items{ compare };
};
double Basket::total_recepit(std::ostream &os)const
{
double sum = 0.0;
for (auto iter = items.cbegin(); iter != items.cend(); iter = items.upper_bound(*iter)) {
sum += print_total(os, **iter, items.count(*iter));
}
os << "Total Sale: " << sum << endl;
return sum;
}
#include <iostream>
#include <vector>
#include "Quote.h"
using namespace std;
int main()
{
vector<Quote> Qvec;
Bulk_Quote b1("c++", 90, 5, 0.1);
Bulk_Quote b2("c", 50, 5, 0.1);
Qvec.push_back(b1);
Qvec.push_back(b2);
double sum = 0.0;
for (auto &i : Qvec) {
sum += i.net_price(10);
}
cout << sum << endl;
}
调用的是Quote中的net_price版本,不打折的。
15.29 再运行一次你的程序,这次传入Quote对象的shared_ptr。如果这次计算出的总额与之前的程序不一致,解释为什么,如果一致,也请说明理由。
#include <iostream>
#include <vector>
#include <memory>
#include "Quote.h"
using namespace std;
int main()
{
vector<shared_ptr<Quote>> basket;
auto p1 = make_shared<Bulk_Quote> ("c++", 90,5,0.1);
auto p2 = make_shared<Bulk_Quote>("c", 50, 5, 0.1);
basket.push_back(p1);
basket.push_back(p2);
double sum = 0.0;
for (auto &i : basket) {
sum += i->net_price(10);
}
cout << sum << endl;
}此次调用的是Bulk_quote中的net_price版本。
练习15.30 编写你自己的Baseket类,用它计算上一个练习中交易记录的总价格。
#include <iostream>
#include <memory>
#include <set>
#include "Quote.h"
using namespace std;
class Basket {
public:
double total_recepit(std::ostream &)const;
void add_item(const Quote &sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
void add_item(Quote &&sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
private:
static
bool compare(const std::shared_ptr<Quote> &lhs, const std::shared_ptr<Quote> &rhs)
{
return lhs->isbn() < rhs->isbn();
}
std::multiset<shared_ptr<Quote>, decltype(compare)*> items{ compare };
};
double Basket::total_recepit(std::ostream &os)const
{
double sum = 0.0;
for (auto iter = items.cbegin(); iter != items.cend(); iter = items.upper_bound(*iter)) {
sum += print_total(os, **iter, items.count(*iter));
}
os << "Total Sale: " << sum << endl;
return sum;
}
相关文章推荐
- SICP 习题2.39 reverse实现
- 使用 JMeter 完成常用的压力测试
- 0624学期总结
- iOS CALayer 理解position与anchorPoint
- Ubuntu14.04 安装Caffe(仅CPU)
- yum 安装php7和相关扩展
- Centos环境制作Docker Tomcat镜像
- Spring mvc No mapping found for HTTP request with URI
- Jmeter教程 简单的压力测试
- sqlite多进程并发读写模式下,返回SQLITE_BUSY错误的处理方法
- matlab之any()、imshow()、image()、imagesc()、取整函数fix, floor, ceil,round
- ArrayList的使用方法【转载】
- 压力测试工具JMeter入门教程
- spring定时任务配置、使用说明(简单、全)
- 几个ip查询接口
- Git简介
- ECMAScript 6
- 股票数据自动入库hive到oracle
- Android之RecyclerView的使用总结
- 链表的交点问题