源代码前30页.docx
- 文档编号:26029866
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:48
- 大小:27.45KB
源代码前30页.docx
《源代码前30页.docx》由会员分享,可在线阅读,更多相关《源代码前30页.docx(48页珍藏版)》请在冰豆网上搜索。
源代码前30页
DeltaGrad智能股票投资系统V1.0
源代码前30页
#pragmaonce
#include
#include"type_def.h"
namespacenrv
{
//!
内存连续型容器的随机迭代器模板。
只需要指定Val_Type、is_reverse,再通过make_begin()、make_end()就可以创建对象。
template
classarr_iterator
{
public:
typedefVal_Typevalue_type;
typedefvalue_type*pointer;
typedefvalue_type&reference;
typedefmuint64size_type;
typedefstd:
:
random_access_iterator_tagiterator_category;//迭代器类型:
随机迭代器
typedefmint64difference_type;//代表两个迭代器之间的距离
template
friendtypenamearr_iterator
:
difference_typeoperator-(constarr_iterator
//为了本模板实例化出的不同类之间互相转换时访问彼此的私有构造函数:
template
friendclassarr_iterator;
typedefarr_iterator
typedef_Myiter_Unchecked_type;//使用stl算法时被调用,用于检查合法性
public:
staticarr_iteratormake_begin(pointerp,size_typecur_size,difference_typestep=1,size_typecol_size=-1,size_typeoriginal_col_size=-1)
{
returnarr_iterator(p,(is_reverse?
(cur_size-1):
0),step,col_size,original_col_size);
};
staticarr_iteratormake_end(pointerp,size_typecur_size,difference_typestep=1,size_typecol_size=-1,size_typeoriginal_col_size=-1)
{
returnarr_iterator(p,(is_reverse?
-1:
cur_size),step,col_size,original_col_size);
}
arr_iterator(){};
arr_iterator(constarr_iterator&other):
m_ptr(other.m_ptr),
m_cur_ptr(other.m_cur_ptr),
m_cur_pos(other.m_cur_pos),
m_step(other.m_step),
m_col_size(other.m_col_size),
m_original_col_size(other.m_original_col_size)
{};
arr_iterator&operator=(constarr_iterator&other)
{
if(this!
=&other)
{
m_ptr=other.m_ptr;
m_cur_ptr=other.m_cur_ptr;
m_cur_pos=other.m_cur_pos;
m_step=other.m_step;
m_col_size=other.m_col_size;
m_original_col_size=other.m_original_col_size;
}
return*this;
}
virtual~arr_iterator(){};
arr_iterator&operator+=(size_typedis)//所有+-int操作均最终调用此函数
{
m_cur_pos+=(is_reverse?
-dis:
dis);
calculate_cur_ptr();
return*this;
};
_Myiter&_Rechecked(_Unchecked_type_Right)
{//resetfromuncheckediterator
*this=_Right;
return(*this);
}
//使用stl算法时被调用,用于检查合法性
_Unchecked_type_Unchecked()const
{//makeanuncheckediterator
return(*this);
}
arr_iterator&operator++()
{
return(*this)+=1;
};
arr_iteratoroperator++(int)
{
arr_iteratoriter(*this);
(*this)+=1;
returniter;
};
arr_iterator&operator-=(size_typedis)
{
return(*this)+=(-1*dis);
};
arr_iterator&operator--()
{
return(*this)-=1;
};
arr_iteratoroperator--(int)
{
arr_iteratoriter(*this);
(*this)-=1;
returniter;
};
booloperator==(constarr_iterator&other)const
{
if(this==&other)
returntrue;
else
returnm_ptr==other.m_ptr
&&m_cur_ptr==other.m_cur_ptr
&&m_cur_pos==other.m_cur_pos
&&m_step==other.m_step
&&m_col_size==other.m_col_size
&&m_original_col_size==other.m_original_col_size;
};
booloperator!
=(constarr_iterator&other)const
{
return!
(*this==other);
};
booloperator<(constarr_iterator&other)
{
if(m_ptr!
=other.m_ptr)
throwstd:
:
runtime_error("cannotcomparetowiteratorscamefromdifferentobjects");
returnm_cur_pos }; booloperator>(constarr_iterator&other) { if(m_ptr! =other.m_ptr) throwstd: : runtime_error("cannotcomparetowiteratorscamefromdifferentobjects"); return! (*this =other); }; booloperator>=(constarr_iterator&other) { if(m_ptr! =other.m_ptr) throwstd: : runtime_error("cannotcomparetowiteratorscamefromdifferentobjects"); return! (*this }; booloperator<=(constarr_iterator&other) { if(m_ptr! =other.m_ptr) throwstd: : runtime_error("cannotcomparetowiteratorscamefromdifferentobjects"); return! (*this>other); }; referenceoperator*() { return*(m_cur_ptr); }; pointeroperator->() { returnm_cur_ptr; }; //从非const类型隐式转换为const类型 operatorarr_iterator : add_const : type,is_reverse>()const { returnarr_iterator : add_const : type,is_reverse>(m_ptr,m_cur_pos,m_step,m_col_size,m_original_col_size); } //从const类型显式转换为非const类型,需要显示调用 explicitoperatorarr_iterator : remove_const : type,is_reverse>()const { returnarr_iterator : remove_const : type,is_reverse> (const_cast : remove_const : type*>(m_ptr),m_cur_pos,m_step,m_col_size,m_original_col_size); } //从reverse类型转换为非reverse类型 arr_iterator { if(is_reverse) returnarr_iterator else returnarr_iterator } private: arr_iterator(pointerp,size_typepos,difference_typestep=1,size_typecol_size=-1,size_typeoriginal_col_size=-1) : m_ptr(p),m_cur_ptr(p),m_cur_pos(pos),m_step(step),m_col_size(col_size),m_original_col_size(original_col_size) { calculate_cur_ptr(); }; voidcalculate_cur_ptr() { if(0==m_col_size) m_cur_ptr=m_ptr; elseif(-1==m_col_size) m_cur_ptr=m_ptr+m_cur_pos*(is_reverse? -m_step: m_step); else m_cur_ptr=m_ptr+(m_original_col_size*(m_cur_pos/m_col_size)+m_cur_pos%m_col_size)*m_step; } private: pointerm_ptr=nullptr;//起始指针位置 pointerm_cur_ptr=nullptr;//当前指针位置,只用于解引用 size_typem_cur_pos=0;//当前逻辑位置 difference_typem_step=1;//步长 size_typem_col_size=-1;//列数 size_typem_original_col_size=-1;//每前进一列需要增加的偏移量 }; template arr_iterator : size_typedis) { arr_iterator returni+=dis; } template arr_iterator : size_typedis) { arr_iterator returni-=dis; } template typenamearr_iterator : difference_typeoperator-(constarr_iterator { if(left.m_ptr! =right.m_ptr) throwstd: : runtime_error("cannotoperatetowiteratorscamefromdifferentobjects"); return(left.m_cur_pos-right.m_cur_pos)*(is_reverse? -1: 1); } }//namespacenrv #pragmaonce #include #include"debugging.h" #include"type_def.h" namespacenrv { //! 代表一个由一维数组抽象成的多维数组的行迭代器,内存必须连续 template classarr_row_iterator { public: typedefTy_Valuevalue_type;//迭代器解引用返回的数据类型 typedefvalue_type*pointer; typedefvalue_typereference; typedefconstvalue_typeconst_reference; typedefmuint64size_type; typedefstd: : random_access_iterator_tagiterator_category;//迭代器类型: 随机迭代器 typedefmuint64difference_type;//代表两个迭代器之间的距离 typedefTy_Value_Innervalue_type_inner;//内部数据类型 /**@brief *构造函数 *buffer_original为原始指针,用于比较两个迭代器是否源自同一个对象 *buffer_begin为起始指针 *sz代表每行的元素个数 *step代表元素间隔 */ arr_row_iterator(value_type_inner*buffer_original,value_type_inner*buffer_begin,size_typesz,size_typestep=1) : m_buffer_original(buffer_original),m_buffer(buffer_begin),m_size(sz),m_step(step) { } arr_row_iterator(constarr_row_iterator&other): m_buffer_original(other.m_buffer_original),m_buffer(other.m_buffer),m_size(other.m_size) { } arr_row_iterator&operator=(constarr_row_iterator&other) { if(this! =&other) { m_buffer=other.m_buffer; m_size=other.m_size; m_step=other.m_step; } } booloperator==(constarr_row_iterator&other)const { if(this==&other) returntrue; returnm_buffer==other.m_buffer&&m_size==other.m_size&&m_step==other.m_step; } booloperator! =(constarr_row_iterator&other)const { return! (*this==other); } booloperator<(constarr_row_iterator&other)const { MASSERT(m_buffer_original==other.m_buffer_original); returnm_buffer } referenceoperator*() { returnvalue_type(m_buffer,m_size,m_step); } const_referenceoperator*()const { returnvalue_type(m_buffer,m_size,m_step); } arr_row_iterator&operator++() { (*this)+=1; return*this; } arr_row_iteratoroperator++(int) { arr_row_iteratortemp(*this); ++(*this); returntemp; } arr_row_iterator&operator+=(size_typen) { m_buffer+=(m_size*n*m_step); return*this; } arr_row_iteratoroperator+(size_typen)const { returnarr_row_iterator(m_buffer_original,m_buffer+m_size*n*m_step,m_size,m_step); } private: value_type_inner*m_buffer_original=nullptr;//原始指针,不能修改,用于比较两个迭代器是否源自同一个对象 value_type_inner*m_buffer=nullptr; size_typem_size=1;//本迭代器对应的行的元素的个数 size_typem_step=1;//步长,也就是元素之间的间隔 }; } #pragmaonce #include"debugging.h" #include"type_def.h" namespacenrv { //! 代表一个由一维数组抽象成的多维数组中的一行的引用,主要用于执行swap template classarr_row_ref { public:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 源代码 30