看到這篇有感而發,現實中常見的問題之一,為了方便說明,把原先的問題簡化,求鄰近元素後者比前面大的數對
最初的方法
原先我只會用這種方法
1 | int calc(const std::vector<int> &v) |
利用vector來作,實在不高明
Better Solution
參考上面blog的作法
1 | template <typename T> |
好一點了,不限定要是vector,不過還是要思考一下it1和it2的關聯性
Range-V3 Solution
可能成為下一代STL的Range-v3,其作法就類似FP中的pipeline的方式處理,隱藏了iterator的存在
1 | template <typename T> |
Range-V3 Solution Ver 2, Sliding Window
Range-v3最近加入了Sliding Window
的觀念,比起上面的方式更加通用,不過還是不知道怎麼把他轉成Ranges轉成Tuple,只好寫成這樣
1 | template <typename T> |
Conclusion
抽象的程度越高,Debug的難度也自然越高,看著gcc或是clang吐出來的compilation error真是一個頭兩個大,尤其是跟Range-v3扯上關係
Reference
— range-v3
— Super expressive code by Raising Levels of Abstraction
— Ranges: the STL to the Next Level