看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《loveme00835 (朴髮箍)》之銘言: > 當然引數超過一頁斷行也是必須. > 加長的手法像是加上識別字: > std::copy( vec.begin(), vec.end(), std::ostream_iterator<int>(cout) ); > 雖然這樣不超過一頁, 但我還是習慣將第三個引數寫在下一行. > 另外, 縮短也是有好處的: > #define each(container) (container).begin(), (container).end() > std::copy( each(vec), std::ostream_iterator<int>(cout) ); 感謝分享,只好來火力支援一下,boost::range 可以直接寫。 boost::copy ( vec, std::ostreamiterator<int>(cout) ) ; 第一個參數並不是 container,而是 range, 因為 container 可以自動轉成一個 range, 所以可以直接把 contaner 傳進演算法。 什麼是 range 請看這邊 http://tinyurl.com/43tl4ar, 懶的看的話其實基本上就是設計來取代 iterator 的東西, 實質上是 pair of iterators,把一對 iterator 包裝起來, 更重要的是把跟 iterator 相關的操作也包裝起來, 於是很多東西用 range 作會非常簡潔易讀(相較於 iterator 而言)。 以 boost::range 裡面提供的範例, 如果我今天不只想要拷貝這個 vec,而且我想要反序拷貝,我只需要寫 boost::copy ( vec | boost::adaptors::reversed, std::ostream_iterator<int>(std::cout) ) ; 如果我不但想要反序拷貝,而且我只想拷貝 unique 的元素,可以寫 boost::copy( vec | boost::adaptors::reversed | boost::adaptors::uniqued, std::ostream_iterator<int>(std::cout) ); 不僅易讀,且因為只是 adaptor,不需作出實體, 所以記憶體使用跟校能也都很好。 請大家多多愛用。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.118.86
loveme00835:感謝! 好奇有沒有把array包裝起來的方法 04/11 00:51
loveme00835:找到了! 原來是漏看 :P 04/11 01:13
loveme00835:之前還自己寫... 04/11 01:24
tomap41017:太誇張了=口= 04/11 01:58
legnaleurc:boost 真是什麼都有 XD 04/11 02:04
xatier:推 boost 真的是一座寶山 04/11 07:42
adxis:很多寶 不過有沒有啥方法可以簡單抽出來用啊 04/11 11:44
adxis:每次都被抱怨用了太肥的lib 0rz 04/11 11:44
james732:boost有些header檔應該可以直接拿來用? 04/11 11:48
holymars:不是有些..boost大概有八成的library都是header only吧 04/11 14:14
yoco315:對了,文中連結強力推薦看一下,是 Andrei Alexandrescu 在 04/11 16:19
yoco315:2009 boostcon 演講的內容,裡面對 range 有很清楚的介紹 04/11 16:19
yoco315:文中講到很多現有iterator的缺點,以及為什麼需要range 04/11 16:22
yoco315:看完會很期待range趕快加入標準 (LOL) 04/11 16:26
littleshan:可是C++0x不是已經final draft了嗎 (挖鼻 04/11 17:41
yoco315:再等 15 年 XD 04/11 17:58
loveme00835:再看看 range-based for 吧, 沒有語言的基本支援, 光 04/11 22:51
loveme00835:靠庫還是不夠, 像此例要靠重載運算子, 雖然操作像是 04/11 22:53
loveme00835:旗標, 但是仔細看運算元, 語義根本不一樣, 就如 h 大 04/11 22:54
loveme00835:所說, 我在用 doc 上的範例時不只需要 header, VS還跟 04/11 22:55
loveme00835:我講需要連結 RegEx ...真是不解 04/11 22:55