24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 710  |  回复: 5

lixy1217

木虫 (著名写手)

[交流] STL中重载运算的问题

以vector的加法为例,首先想到的语法是

template<typename T>
vector<T>&operator+(vector<T>&a,vector<T>&b)
但是有一个问题,我们会希望不同类型(int、double、complex)之间的向量应该也是可以相加的。

而如果用两个类型名,写成如下
operator+(vector<T1>&a,vector<T2>&b)
我们又无法在定义的时候就知道该返回哪个类型的,显然int+double应该返回double,而double+complex该返回complex

而如果放弃对"+"的重载,而只重载"="和"+=",即 "c=a;  c+=b;"  的方式,这样看起来不舒服倒是小事,但我如果还想重载一个矩阵与向量的乘法那该怎么办呢?

还有一种方法,就是将"小"的向量赋值给"大"的向量,达到类型统一后再进行计算,可这样的话就可能要多出很多计算量。 例如complex+complex是double+complex的两倍,而complex*complex大概是double*complex的三倍。

这方面,Matlab似乎很好的解决了此问题,但不知道用了什么样的办法。

当然还是更希望能听到各位的高见~
回复此楼

» 猜你喜欢

偶尔敞开心扉,世界将不再孤独
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dlmufei

木虫 (小有名气)

★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+2 2015-09-15 16:00:18
之所以STL没有这样实现就是有你说的这种原因,我感觉要想解决就得在这门语言刚开始设计数据类型的时候给你设计好。如果让咱们重新设计数值类型,或者你可以自己定义一个数值类型的库,所有数据的表示都用自定义的类型来表示的话,你说着这个问题完全可以通过多态机制实现的。
Matlab之所以能实现你说的这个问题,就是因为Matlab的弱数据类型,这和语言刚开始的设计用途是有密切关系的!
牛逼是自己干出来的!
2楼2015-09-15 12:29:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
2楼: Originally posted by dlmufei at 2015-09-15 12:29:09
之所以STL没有这样实现就是有你说的这种原因,我感觉要想解决就得在这门语言刚开始设计数据类型的时候给你设计好。如果让咱们重新设计数值类型,或者你可以自己定义一个数值类型的库,所有数据的表示都用自定义的类 ...

可是Matlab不说是基于C++之上的吗?那就应该能用C++做到这一点吧?
偶尔敞开心扉,世界将不再孤独
3楼2015-09-15 16:01:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dlmufei

木虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
3楼: Originally posted by lixy1217 at 2015-09-15 16:01:34
可是Matlab不说是基于C++之上的吗?那就应该能用C++做到这一点吧?...

1、Matlab怎么大的软件怎么可能是C++一种语言编写的,里面包含C/C++、Java以及一些脚本语言等。
2、MatLab只是M语言的的一个IDE,和语言本身没有关系。
3、一种语言的解释、编译等操作是由语言当初设计时决定的,就是一种规则的制定而已,后面的开发工具只是规则的实现,与实现的语言没有关系。
牛逼是自己干出来的!
4楼2015-09-15 17:10:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chanchancl

新虫 (初入文坛)

★ ★ ★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
lixy1217: 金币+4, 谢谢参与 2015-09-18 09:20:57
1。 对于模板返回值类型,可以使用C11的新关键字 delctype 可以让编译器预推断类型,详情自己搜索下。
2。这属于模板方面的问题,建议你多看下相关的书籍。实现起来没有你说的效率问题。

[ 发自小木虫客户端 ]
5楼2015-09-17 09:23:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
5楼: Originally posted by chanchancl at 2015-09-17 09:23:01
1。 对于模板返回值类型,可以使用C11的新关键字 delctype 可以让编译器预推断类型,详情自己搜索下。
2。这属于模板方面的问题,建议你多看下相关的书籍。实现起来没有你说的效率问题。
...

看起来,auto和delctype的组合应该是能解决我提出的问题,但不知道哪个版本的C++能够支持C++11这样的语法,我用的是VS2010,貌似是没有这样的定义方式的。
偶尔敞开心扉,世界将不再孤独
6楼2015-09-18 09:22:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lixy1217 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿0817化学工程与技术,求调剂 +3 我不是只因 2026-04-02 4/200 2026-04-02 21:50 by barlinike
[考研] 330分求调剂 +15 qzenlc 2026-03-29 15/750 2026-04-02 21:41 by 百灵童888
[考研] 交通运输考试264分求工科调剂 +3 jike777 2026-04-02 3/150 2026-04-02 17:09 by txp1986
[考研] 085600,320分求调剂 +5 大馋小子 2026-04-02 5/250 2026-04-02 14:32 by 二三365
[考研] 一志愿同济大学323分(080500)求调剂 +6 yikeniu 2026-04-01 6/300 2026-04-02 14:19 by smileboy2006
[考研] 262求调剂 +5 励志一定发文章 2026-04-02 6/300 2026-04-02 12:51 by yulian1987
[考研] 327求调剂 +9 汲亦昊 2026-03-29 9/450 2026-04-02 11:44 by 运气yunqi
[考研] 261求B区调剂 +5 明仔· 2026-04-01 7/350 2026-04-02 11:17 by 邹尉尉
[考研] 311求调剂 +16 zchqwer 2026-04-01 18/900 2026-04-02 10:15 by 不吃魚的貓
[考研] 08工科275分求调剂 +13 AaAa7420 2026-03-31 13/650 2026-04-02 06:19 by 286640313
[考研] 食品学硕362求调剂 +3 xuanxianxian 2026-04-01 3/150 2026-04-01 21:05 by 啊李999
[考研] 一志愿南昌大学324求调剂 +7 hanamiko 2026-03-30 7/350 2026-04-01 13:22 by JourneyLucky
[考研] 复试调剂 +7 双马尾痞老板2 2026-03-31 7/350 2026-03-31 19:49 by Dyhoer
[考研] 375求调剂 +7 雨夏整夜 2026-03-29 7/350 2026-03-31 18:52 by xhai2011
[考研] 336材料求调剂 +10 陈滢莹 2026-03-26 12/600 2026-03-31 17:59 by jp9609
[考研] 一志愿中海洋材料357 +4 麦恩莉. 2026-03-30 4/200 2026-03-31 14:35 by 记事本2026
[考研] 266分,求材料冶金能源化工等调剂 +8 哇呼哼呼哼 2026-03-27 10/500 2026-03-31 13:35 by Huaxue_Wang
[考研] 370求调剂 +3 080700调剂 2026-03-30 3/150 2026-03-31 01:09 by A_Zhe
[考研] 322求调剂 +10 宋明欣 2026-03-27 10/500 2026-03-30 18:47 by 544594351
[考研] 086000生物与医药调剂 +5 Feisty。 2026-03-28 9/450 2026-03-29 12:02 by longlotian
信息提示
请填处理意见