C++11嘗鮮,趣味編程:靜夜思

來源:互聯網
上載者:User
CppLinq的擴充
// cpplinqex.hpp#include "cpplinq.hpp"namespace cpplinq{               namespace detail{template<typename TKeyPredicate, typename TSelector>struct to_groups_selector_builder : base_builder{typedefto_groups_selector_builder<TKeyPredicate, TSelector>    this_type           ;typedef     TKeyPredicate                       key_predicate_type  ;typedef     TSelectorselector_type;key_predicate_type          key_predicate   ;selector_typeselector   ;CPPLINQ_INLINEMETHOD explicit to_groups_selector_builder (key_predicate_type key_predicate, selector_type selector) throw ():   key_predicate   (std::move (key_predicate)),   selector(std::move (selector)){}CPPLINQ_INLINEMETHOD to_groups_selector_builder (to_groups_selector_builder const & v):   key_predicate(v.key_predicate),   selector(v.selector){}CPPLINQ_INLINEMETHOD to_groups_selector_builder (to_groups_selector_builder && v) throw ():   key_predicate(std::move (v.key_predicate)),   selector(std::move (v.selector)){}template<typename TRange>CPPLINQ_INLINEMETHOD std::map<typename get_transformed_type<key_predicate_type, typename TRange::value_type>::type, std::vector<typename get_transformed_type<selector_type, typename TRange::value_type>::type>> build (TRange range){std::map<typename get_transformed_type<key_predicate_type, typename TRange::value_type>::type, std::vector<typename get_transformed_type<selector_type, typename TRange::value_type>::type>> groupings;while (range.next ()){auto value  = range.front ();auto key    = key_predicate (value);groupings[key].push_back (selector (value));}return std::move (groupings);}};}template<typename TKeyPredicate, typename TSelector>CPPLINQ_INLINEMETHOD detail::to_groups_selector_builder<TKeyPredicate, TSelector>  to_groups (TKeyPredicate key_predicate, TSelector selector) throw (){return detail::to_groups_selector_builder<TKeyPredicate, TSelector>(std::move (key_predicate), std::move (selector));}}

靜夜思

#include <iostream>#include <local.h>#include "cpplinqex.hpp"using namespace std;using namespace cpplinq;void print(wstring const& text, int offset){auto groupings = from(text)>> zip_with(range(0, text.length()))>> to_groups([=](pair<wchar_t, int> const& p){return p.second % offset;},[](pair<wchar_t, int> const& p){return wstring(1, p.first);});for(auto const& kvs : groupings){auto v = from(kvs.second)>> reverse()>> concatenate(L"|");wcout << v << endl;}}int main(){setlocale(LC_ALL, "chs");print(L"床前明月光疑是地上霜舉頭望明月低頭思故鄉", 5);}//低|舉|疑|床//頭|頭|是|前//思|望|地|明//故|明|上|月//鄉|月|霜|光

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.