Re: [問題] std::array class 跟普通的array哪個好?

作者: wtchen (沒有存在感的人)   2015-05-08 16:08:44
最近多唸了點東西,回來補充心得:
某MOOC建議用std::array(C++11新增)取代傳統C array的原因有:
(該MOOC是法文,如果我解讀有錯請小力鞭)
- 傳統C array只能以reference的方式跟函式傳遞值(不管有無加&)
(就是板上所謂的"退化"?)會造成閱讀困難
- 傳統C array沒辦法直接知道array大小
- 傳統C array沒法用 = (ex: tab1 = tab2)
- 傳統C array無法當作結果被函式傳回
- 傳統C array有跟別種type不同的宣告方式(不能用({1, 2, 3}))
該MOOC結論:傳統C array沒有好處,能用vector就用vector,
如果array size不會變就用std::array
※ 引述《wtchen (沒有存在感的人)》之銘言:
: 問題(Question):
: 在coursera看到有人用std::array去宣告array
: http://www.cplusplus.com/reference/array/array/
: 可是array不是用一般方式宣告就好了嗎?
: 例如說 int foo [5] = { 16, 2, 77, 40, 12071 };
: 多include 一個array標頭再宣告成
: std::array<int,5> foo = { 16, 2, 77, 40, 12071 };
: 不是比較麻煩嗎?
: 我想問的是用std:array宣告array有啥特別的優點呢?
: 謝謝。
作者: Feis (永遠睡不著 @@)   2015-05-08 16:20:00
好處: C 傳統 array 打的字比較少
作者: Ebergies (火神)   2015-05-08 18:30:00
推樓上
作者: johnjohnlin (嗯?)   2015-05-09 09:20:00
產生vec2之類的型別的時候稍微有點用
作者: s25g5d4 (function(){})()   2015-05-09 19:01:00
還有可以用 iterator, 在設計 template 的時候比較有用
作者: azureblaze (AzureBlaze)   2015-05-09 19:14:00
http://ideone.com/O0BK2N iterator傳統array也可用喔
作者: s25g5d4 (function(){})()   2015-05-09 19:17:00
我知道啊 不過那不是 member function
作者: Feis (永遠睡不著 @@)   2015-05-09 20:51:00
就泛型而言 Member function 有比較好?
作者: s25g5d4 (function(){})()   2015-05-09 20:59:00
我的想法很簡單 就只是寫 xxx.begin() 抓的到東西而已至於泛型是不是有 OO 比較好我不知道當然如果 iterator 不是這樣取就沒差
作者: Feis (永遠睡不著 @@)   2015-05-09 21:09:00
這樣的話,我覺得連 begin 都不用更好
作者: Killercat (殺人貓™)   2015-05-10 23:03:00
array老實講,目前除了在函數簽名裡面限定傳入型別(array<3>跟array<5>會被當不同型別)外,實務上的功能實在是滿有限的...

Links booklink

Contact Us: admin [ a t ] ucptt.com