2011-02-01から1ヶ月間の記事一覧

Boost.PPでエラトステネスの篩

プリプロセッサをやればかわいい妹ができると聞いて。 #include <boost/preprocessor/arithmetic/inc.hpp> #include <boost/preprocessor/arithmetic/mod.hpp> #include <boost/preprocessor/comparison/not_equal.hpp> #include <boost/preprocessor/repetition/for.hpp> #include <boost/preprocessor/seq/enum.hpp> #include </boost/preprocessor/seq/enum.hpp></boost/preprocessor/repetition/for.hpp></boost/preprocessor/comparison/not_equal.hpp></boost/preprocessor/arithmetic/mod.hpp></boost/preprocessor/arithmetic/inc.hpp>

多相ファンクタのはなし

関数テンプレートは型がないというお話がありました。値もありません。 template <class T> T square(T x) { return x * x; } int main() { int array[] = {0, 1, 2, 3}; std::vector<int> v; // エラー!squareを引数として使用できない std::transform(array, array + 4, </int></class>…

Rangeの直積を作るadaptor

直積を作るadaptorがない気がしたので書いてみました。 つかいかた #include <iostream> #include <string> #include <boost/lambda/lambda.hpp> #include <boost/range/algorithm/for_each.hpp> #include <boost/range/irange.hpp> #include <boost/tuple/tuple_io.hpp> #include "product.hpp" int main() { // (1 a) (1 b) (1 c) (2 a) (2 b) (2 c) …</boost/tuple/tuple_io.hpp></boost/range/irange.hpp></boost/range/algorithm/for_each.hpp></boost/lambda/lambda.hpp></string></iostream>

Rangeの内容を出力する

C++

こんな感じで使います。 int main() { using namespace std; vector<vector<string>> v{{"abc", "def"}, {"ghi", "jkl"}}; cout << iorate::print(v); } 出力 {{abc,def},{ghi,jkl}}実装 #include <iostream> #include <iterator> #include <type_traits> namespace iorate { template <class T> struct print_holder {</class></type_traits></iterator></iostream></vector<string>…