pstade::oven::cycled
#include <iostream> #include <string> #include <pstade/oven/cycled.hpp> #include <pstade/oven/io.hpp> int main(){ namespace oven = pstade::oven; namespace lambda = boost::lambda; std::cout << (std::string("01")|oven::cycled(3)) << std::endl; int array[] = {0, 1, 2}; auto range = array|oven::cycled(3); std::cout << range << std::endl; array[1] = 7; std::cout << range << std::endl; return 0; }
[出力]
{0,1,0,1,0,1} {0,1,2,0,1,2,0,1,2} {0,7,2,0,7,2,0,7,2}
pstade::oven::cycled は、range を引数の数だけ展開するアダプタです。
何かのデータを繰り返し展開したい場合に便利そう。
また、引数なしにすると無限に繰り返しを行ないます。
std::wcout.imbue(std::locale("japanese")); std::wcout << (std::wstring(L"無駄")|oven::cycled) << std::endl;
[出力]
{無,駄,無,駄,無,駄,無,駄,無,駄,無,駄,無,駄,...
これで、DIO様ごっこが出来ます。
しかし、"," がちょっと邪魔なので、見やすいように改造。
struct to_string{ typedef std::string result_type; template<typename T> result_type operator()(const T rhs) const{ return static_cast<const std::string&>(rhs|pstade::oven::copied); } }; std::cout << (std::string("オラ") |oven::rows(1, 4) |oven::cycled |oven::transformed(to_string())) << std::endl;
[出力]
{オラ,オラ,オラ,オラ,オラ,オラ,オラ,オラ,オラ,...
ふぅやれやれだぜ。
[pstade]
ver 1.04.3
[参照]
http://d.hatena.ne.jp/faith_and_brave/20100907/