#include "Triangular.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> Triangular::_elems;
// int Triangular::_initial_size = 8;
// Triangular::Triangular()
// {
// _length = 1;
// _beg_pos = 1;
// _next = 0;
// }
// Member initialization list(成员初始化列表)
Triangular::Triangular(int len, int bp)
: _name("Triangular"), _length(len > 0 ? len : 1), _beg_pos(bp > 0 ? bp : 1)
{
_next = _beg_pos - 1;
int elem_cnt = _beg_pos + _length - 1;
if (_elems.size() < elem_cnt)
gen_elements(elem_cnt);
}
// 给定某值,依据该值是否在数列内而返回true或false。
bool Triangular::is_elem(int value)
{
if (!_elems.size() || _elems[_elems.size() - 1] < value)
gen_elems_to_value(value);
vector<int>::iterator found_it;
vector<int>::iterator end_it = _elems.end();
found_it = find(_elems.begin(), end_it, value);
return found_it != end_it;
}
void Triangular::gen_elements(int length)
{
if (length < 0 || length > _max_elems)
{
cerr << "Triangular Sequence: oops: length too large "
<< length << " -- exceeds max size of "
<< _max_elems << endl;
return;
}
if (_elems.size() < length)
{
int ix = _elems.size() ? _elems.size() + 1 : 1;
for (; ix <= length; ++ix)
{
_elems.push_back(ix * (ix + 1) / 2);
}
}
}
void Triangular::gen_elems_to_value(int value)
{
int ix = _elems.size();
if (!ix)
{
_elems.push_back(1);
ix = 1;
}
while (_elems[ix - 1] < value && ix < _max_elems)
{
++ix;
_elems.push_back(ix * (ix + 1) / 2);
}
if (ix == _max_elems)
cerr << "Triangular Sequence: oops: value too large "
<< value << " -- exceeds max size of "
<< _max_elems << endl;
}
int Triangular::elem(int pos) const
{
return _elems[pos - 1];
}
bool Triangular::next(int &value) const
{
if (_next < _beg_pos + _length - 1)
{
// 更改了class object _next的内容。
value = _elems[_next++];
return true;
}
return false;
}
Triangular &Triangular::copy(const Triangular &rhs)
{
if (this != &rhs)
{
_length = rhs._length;
_beg_pos = rhs._beg_pos;
_next = rhs._beg_pos - 1;
}
return *this;
}
istream &
operator>>(istream &is, Triangular &rhs)
{
char ch1, ch2;
int bp, len;
// 假设输入为(3,6)6 10 15 21 28 36
// 那么ch1 == '(',bp == 3,ch2 == ',',len == 6。
is >> ch1 >> bp >> ch2 >> len;
// 设定rhs的三个data member
rhs.beg_pos(bp);
rhs.length(len);
rhs.next_reset();
rhs.gen_elements(bp + len - 1);
return is;
}
没有合适的资源?快使用搜索试试~ 我知道了~
Triangular+Triangular-iterator+iterator-overflow.zip

共10个文件
cpp:4个
h:3个
exe:3个

需积分: 0 0 下载量 92 浏览量
更新于2022-12-21
收藏 294KB ZIP 举报
Triangular类,包含对Triangular类的提领操作Triangular_iterator类,以及异常类iterator_overflow。
输入输出样例为:
(3,6)
Triangular Series of 6 elements
6 10 15 21 28 36
收起资源包目录













共 10 条
- 1
资源推荐
资源预览
资源评论
144 浏览量
2020-05-25 上传
2022-01-17 上传
2021-08-12 上传
2021-05-06 上传
171 浏览量
189 浏览量

171 浏览量
2012-12-10 上传
173 浏览量
2022-09-21 上传
113 浏览量
200 浏览量
2021-03-18 上传
2022-09-23 上传

154 浏览量
2021-04-28 上传
152 浏览量
2021-05-23 上传
112 浏览量
156 浏览量
129 浏览量
154 浏览量
158 浏览量
147 浏览量
2021-05-27 上传
2022-02-07 上传
109 浏览量
2021-02-11 上传
6393 浏览量
资源评论


Spikeeee-
- 粉丝: 396
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 简析项目管理协会标准体系样本.doc
- 数据库原理填空题(有答案).doc
- 关于网络游戏对大学生的影响.pptx
- 工程建设项目管理复习题.doc
- 物联网大数据室内空气质量监控解决方案.ppt
- 专题讲座资料(2021-2022年)单片机控制的频率计毕业设计论文.doc
- 算法初步单元测试1.doc
- 计算机信息管理专业顶岗实习手册.doc
- 2022年浙江省第八届大学生财会信息化竞赛.doc
- 南方电网配电网自动化系统验收管理标准.doc
- 网络营销实用培训教材.pptx
- 计算机二级msoffice复习笔记(整理).pdf
- 土木工程知识点-跨海大桥的信息化建设思路.doc
- 架河站综合自动化系统技术规范书.doc
- 卷烟营销网络业务规范.ppt
- 医学生理学教学内容信息化的实践.ppt
安全验证
文档复制为VIP权益,开通VIP直接复制
