- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
l泛型矩阵类型
l将Matrix定义为具备参数T的模板类即可。
l矩阵数据的
l用m和n记录矩阵的维度;
l用一个长为m*n的数组矩阵元素;
l内置数组的内存是紧凑的,但由于需要动态内存,注意new和delete的时机;
l使用vector嵌套则效率较低,可以用一维vector,范围对应位置时临时计算下
标。
l重载operator[]返回对应位置元素
l需要有两级中括号,那么矩阵的中括号重载应该返回对应行,根据参数返回所在
行的头指针;
l第二级指针则自动调用C++的中括号,对指针自动偏移求元素即可。
lpush_back()函数
l调用底层vector的对应函数即可,指针数组需要手动实现。
lat()函数实现行展开元素
l内置数组需要单独写越界异常;
lvector自带的at函数会抛出异常,因此直接调用array的at函数即可。
lreshape()函数
l由于数据使用一维数组,因此只是更改Matrix类的m和n,根据大小重塑
数组,并移动数据;
l由于存在数据移动,应当是先生成新数组,再移动数据,最后销毁原数组。
linitializer_list构造
l将构造函数之一设置为initializer_list,直接构造即可;
l可以将此构造函数的默认值设定为{T{}},这样还可以满足无参构造时生成1*1,
元素为模板类型默认值的矩阵,一举两得。
l操作符重载
l操作符重载相对简单,直接重写函数,根据矩阵运算规则翻译成代码即可;
l可以选择将函数写为类内成员函数,这样判断矩阵尺寸不受成员变量权限影响;
l也可以为m和n单独设置get函数,并在类外写为静态函数。
l移动语义
l使用vector的Matrix移动语义可以无须重写,因为vector自带的移动函数是高效的;
l使用指针处理动态数组的移动语义只需要交换指针即可。
l操作符重载
l操作符重载相对简单,直接重写函数,根据矩阵运算规则翻译成代码即可;
l可以选择将函数写为类内成员函数,这样判断矩阵尺寸不受成员变量权限影响;
l也可以为m和n单独设置get函数,并在类外写为静态函数。
l移动语义
l使用vector的Matrix移动语义可以无须重写,因为vector自带的移动函数是高效的;
l使用指针处理动态数组的移动语义只需要交换指针即可。
纲要
Ø
Ø第二部分:需求分析(扩展1)
Ø第三部分:需求分析(扩展2)
Ø第四部分:需求分析(扩展34)
第一部分:需求分析(扩展1)
l模板参数检查
l使用C++11的static_assert可以实现如static_assert(!std::is_pointer(T)“Tshould
notbeapointertype.”)这样的编译期断言;
l使用C++20的requires可以实现如requires!std::is_pointer(T)的类型限制,编译器会
根据requires的内容打印编译错误;
l使用C++20的concept可以更加简单的实现判断T是否支持+、-和*运算,同时因为
只有当使用运算符时才需要判断,因此可以将requires放在operator函数上。
纲要
Ø
Ø第二部分:需求分析(扩展1)
Ø第三部分:需求分析(扩展2)
Ø第四部分:需求分析(扩展34)
第一部分:需求分析(扩展2)
l编译期矩阵
l内存分配需要在编译期,或者说数据不是动态分配的,则只能选择内置数组
或者array;
l为了方便array的中括号存取,可以用union绑定arrayarrayT,n,m和arrayT,m
*n,从而方便;
l为了契合array的大小,Matrix模板参数可以设为size_t类型,从而减少可能的符号
数值引起的错误;
l同样可以用initializer_list为空代替默认构造函数,尺寸时则截去尾部数据。
第一部分:需求分析(扩展2)
l编译期定尺寸Matrix的reshape
l返回值与类对象相关,应当是一个成员函数;
l由于返回值为定尺寸Matrix,reshape也应当是一个以尺寸为参数的模板函数,元
素类型则根据原始矩阵推导;
l剩余照抄普通版本的函数即可。
l编译期定尺寸
您可能关注的文档
最近下载
- 粤教版(2019)高中信息技术必修一第三章 算法基础(教学设计).docx VIP
- 《植物组织培养》期末复习总结及试题.docx
- 16.田忌赛马(集备表格教案)-部编版语文五年级下册.doc VIP
- 人教版(2024)七年级地理上册3.1《大洲和大洋》优质课件.pptx
- 《变频器技术及应用》电子教案 单元设计 变频器主电路结构及功能认知(单元设计1-3).pdf VIP
- 农村生活污水处理工程初步设计.doc
- 小学残疾儿童送教上门教案(40篇).pdf
- 景观水池防水施工方案.doc VIP
- 防水层施工方案·.docx VIP
- 宿迁学院2023-2024学年第1学期《宏观经济学》期末考试试卷(B卷)含参考答案.docx
文档评论(0)