[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 10/16 19:40 / Filesize : 21 KB / Number-of Response : 53
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Oven/Egg総合スレ part1



1 名前:デフォルトの名無しさん [2009/01/04(日) 23:54:01 ]

■関連サイト■
p-stade.sourceforge.net/

22 名前:デフォルトの名無しさん [2009/01/11(日) 22:03:35 ]
日本語版のドキュメントが欲しくね?
あと、もう少し詳しく書いて欲しくね?(俺だけか・・・)
慣れればどれも同じ様な使い方だからなんとか使えるけど。

あと、pstade::oven::regular ってどういう動作するの?



23 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 01:08:55 ]
>>22
確かにHamigakiは日本語文書があるのがやや有難いとは思う。
ドキュメントを読んでわからないときは、libs\oven\example\を参考にすることが多い。

どういう動作かって?実装のことならソース嫁で頼む。

24 名前:デフォルトの名無しさん [2009/01/13(火) 01:31:33 ]
#include <cmath>
#include <iostream>
#include <iterator>
#include <pstade/oven/counting.hpp>
#include <pstade/oven/filtered.hpp>
#include <pstade/oven/copied_to.hpp>
#include <pstade/oven/taken.hpp>
#include <pstade/oven/regular.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
unsigned long powul(unsigned long x, unsigned long y) {
  return static_cast<unsigned long long>(std::pow(static_cast<double>(x), static_cast<double>(y)));
}
int main() { namespace bll = boost::lambda;
  using namespace pstade::oven;
  unsigned n;
  std::cin >> n;
  counting(1u, max_count)
    | filtered(regular((bll::bind(powul, 30, bll::_1) % bll::_1) == 0))
    | taken(n)
    | copied_to(std::ostream_iterator<unsigned>(std::cout, "\n"));
}

25 名前:デフォルトの名無しさん [2009/01/13(火) 01:39:48 ]
書きかけで送ってしまった。
>>24>>6をBoost.Lambda+regularに置き換えたもの。
このコードで、regularを外すとコンパイルエラーになる。
なぜかというと、公式のリファンレスに書いてある通り、
Boost.LambdaのファンクタがAssignableでないため。
それをどうにかするのがregularということだそうだ。

なお、>>24のコードはunsigned longを使っているため、
unsigned longが32ビット以下の環境では正しい結果を返さないことに注意。

26 名前:デフォルトの名無しさん [2009/01/14(水) 16:27:05 ]
たまには実用的(?)そうなものを。
stream_linesはstreamから1行読んで1要素とするレンジを作るもの。
#include <iostream>
#include <string>
#include <deque>
#include <iterator>
#include <algorithm>
#include <pstade/oven/stream_lines.hpp>
#include <pstade/oven/copied.hpp>
int main() {
  using namespace pstade::oven;
  std::deque<std::string> l = stream_lines(std::cin) | copied;
  std::copy(l.begin(), l.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
姉妹版として、std::istream_iteratorとstd::istreambuf_iteratorに対応する
stream_readとstreambuf_readがある。
また、ファイル相手ならfile_rangeも存在する。こっちはしかもランダムアクセス可とのこと。

27 名前:デフォルトの名無しさん [2009/01/17(土) 02:45:13 ]
narrow_charsとwide_charsはnarrowとwidenで変換しているので、
マルチバイト文字の変換には無力。
わざとうまくいかない例を載せる。これでうまくいく環境があったらびっくりだ。
#include <iostream>
#include <locale>
#include <iterator>
#include <pstade/oven/narrow_chars.hpp>
#include <pstade/oven/algorithm.hpp>
#include <pstade/oven/as_literal.hpp>

int main() {
  using namespace pstade::oven;
  copy(
    L"こんにちわ、世界"
      | as_literal
      | narrow_chars,
    std::ostreambuf_iterator<char>(std::cout));
  std::cout << std::endl;
}

28 名前:デフォルトの名無しさん [2009/01/19(月) 21:15:44 ]
>>8のコードで、NUL出力のような出力イテレータがないかなと思っていたが、eaterがそれだった。
ついでにcopyもレンジ版にした。
#include <iostream>
#include <algorithm>
#include <boost/range.hpp>
#include <pstade/oven/transformed.hpp>
#include <pstade/oven/algorithm.hpp>
#include <pstade/oven/eater.hpp>
int f(int x) {
  std::cout << x << std::endl;
  return x;
}
template<typename Range>
void g(Range const& r) {
  using namespace pstade::oven;
  copy(r, eater());
  copy(r, eater());
}
int main() {
  const int a[] = {1, 2, 3};
  g(a | pstade::oven::transformed(f));
}

29 名前:デフォルトの名無しさん [2009/01/22(木) 04:30:31 ]
#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>
#include <pstade/oven/zipped_with.hpp>
#include <pstade/oven/counting.hpp>
#include <pstade/oven/cycled.hpp>
#include <pstade/oven/taken.hpp>
#include <pstade/oven/any_range.hpp>
#include <pstade/oven/algorithm.hpp>
std::string cat(unsigned i, std::string const& f, std::string const& b) {
  if (f.empty() && b.empty())
    return boost::lexical_cast<std::string>(i);
  else
    return f + b;
}
int main() {
  using namespace pstade::oven;
  std::string const fizz[] = {"", "", "fizz"};
  std::string const buzz[] = {"", "", "", "", "buzz"};
  any_range<std::string, boost::single_pass_traversal_tag> r = boost::make_tuple(
      counting(1u, max_count),
      fizz | cycled, //"", "", "fizz", "", "", "fizz", ...のように無限に繰り返すレンジが作られる。
      buzz | cycled)
    | zipped_with(cat);
  unsigned n;
  std::cout << "How many?" << std::endl;
  std::cin >> n;
  copy(r | taken(n), std::ostream_iterator<std::string>(std::cout, "\n"));
}


30 名前:デフォルトの名無しさん [2009/01/22(木) 04:31:29 ]
改行制限に引っ掛かったので、1レスで済ますのを諦めた。

any_rangeは型消去(type erasure)でどんなレンジでも受け付けるという代物。
ようするにboost::functionのレンジ版とでも言える。
プログラムは、またもや以前のネタの使い回し。>>12より。



31 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 02:49:20 ]
そろそろ即死から逃れられる頃合いか?

32 名前:デフォルトの名無しさん [2009/01/29(木) 17:06:39 ]
保守age

33 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 19:30:41 ]
保守

34 名前:デフォルトの名無しさん [2009/02/05(木) 17:21:50 ]
保守ついでにany_rangeから目次順に取り上げることを目標にする。

というわけでまずはany_indexed。
any_rangeのランダムアクセス特化版、らしい。

35 名前:デフォルトの名無しさん [2009/02/10(火) 16:19:16 ]
void print( pstade::oven::any_indexed<int> r)
{
std::copy(r.begin(), r.end(), std::ostream_iterator<int>(std::cout, "\n"));
}

std::vector<int> v(boost::counting_iterator<int>(0),boost::counting_iterator<int>(10));
pstade::oven::any_indexed<int > ai(v);
print(ai);

36 名前:デフォルトの名無しさん [2009/02/11(水) 14:31:46 ]
pstade::oven::identitiesってなにするもん?

37 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:33:18 ]
single pass range conceptを満たすものからiterator_rangeを作って返すものっぽいな
io.hppのinspect機構はiterator_rangeに対して働くものだから
single(ryを満たすコンテナのままでは動作しないわけだ
さらに引数を指定することによって元のコンテナがsingle pass rangeでもrandom access rangeのように見せかけたりできると
マニュアルやソース、テストを見る限りそう読みとれた

38 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 22:09:21 ]
STLスレからやってきたのか。
あのコードだと、(v|ov::identities)をov::make_range(v)にしても動くな。
どっちを使うかは好みの問題かな。

39 名前:デフォルトの名無しさん [2009/02/12(木) 11:54:40 ]
pstade::oven::parallel_for_each の第一引数はなに?

.net 4 のparallel for と同じ様な動作?

40 名前:停止しました。。。 mailto:sage [2009/02/14(土) 18:05:21 ]
真・スレッドリスターター。。。( ̄ー ̄)ニヤリッ



41 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 07:35:15 ]
>>39
分割数じゃないかなあ?使ったことないけど。

42 名前:デフォルトの名無しさん [2009/02/27(金) 14:33:36 ]
adapted_toとto_baseについて解説よろしく

43 名前:42 [2009/02/27(金) 15:01:39 ]
わかったから、もういいや

44 名前:デフォルトの名無しさん [2009/02/27(金) 16:42:29 ]
pstade::oven::expression はBoost.Typeofを使ってoverheadを無くすでいいのかな?

45 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 10:58:37 ]
>>25
>>24 のソースregularなくてもコンパイル通るけど・・・
taken(n) があると「左辺値がconstです」という旨のエラーになる。

「Boost.LambdaのファンクタがAssignableでない」ってどんなの?

いろいろ試したけど、regular付けなくてもコンパイル通ってしまう。

WinXP, VC++2008EE, boost 1.37(boostpro)


46 名前:デフォルトの名無しさん [2009/03/02(月) 20:43:29 ]
groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/67a593c8e747b97c#
RangeExがレビュー入りだってさ。
レンジアダプタ( | 演算子のやつ)も入っているよ!

47 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:33:08 ]
>>45
Assignableは(publicな)代入演算子を持っているということ。
takenが無ければコンパイルが通るということは、たまたま代入演算子を使わなかったということ。

48 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:03:13 ]
保守

49 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 08:59:48 ]
sage

50 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 03:02:12 ]
保守

今規制されていないから、ネタの1つでも投下したい……。



51 名前:デフォルトの名無しさん [2010/04/27(火) 23:14:58 ]
age

52 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 12:26:57 ]
そろそろboostにrangeExが入るそうで、Ovenとの相互運用性が気になるところ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<21KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef