网站大量收购闲置独家精品文档,联系QQ:2885784924

final project提示-三通学院.pdfVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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编译期定尺寸

文档评论(0)

153****2416 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档