タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

ProgrammingとC++とdeferredに関するagwのブックマーク (154)

  • 標準入出力

    (このコンテンツはメールマガジンの STL & iostream 入門に手を加えたものです。「 STL と iostream が使えるかのチェック」等はメールマガジンの方のページをご覧ください) 皆さんの想像通り、「標準入出力」に対しても、これまで紹介してきた std::strstream や std::fstream と同様に操作することができます。しかしやはり、違う部分も存在します。 そのひとつが、標準入出力の場合にはすでに専用の「グローバル変数」が存在するという点です。 std::strstream を使う時には std::strstream 型変数を、 std::fstream を使う時には std::fstream 型変数を作りました。ところが、標準入出力の場合にはその変数がすでに「グローバル変数」として存在するのです。 それは std::cout と std::cin です。で

  • C++の落とし穴 - Stories of Your Life and Others

    C++の落とし穴 このドキュメントは下記URLのサイトを翻訳したものです。 10年以上前に作成されたドキュメントですが、いくつか新たな気づきを与えてくれた原に感謝して、翻訳してみました。 やや見づらいところもあるかもしれませんが、誰かのお役に立てれば幸いです。 C++ Pitfalls Copyright (C) Cay S. Horstmann 1997 Translated by shnya (unofficial)

  • std::stringstream再考 « Stop Making Sense

    August 2011 (1) July 2011 (1) June 2011 (2) April 2011 (2) March 2011 (2) February 2011 (2) January 2011 (6) December 2010 (6) November 2010 (5) October 2010 (8) September 2010 (2) August 2010 (3) July 2010 (9) June 2010 (4) March 2010 (1) February 2010 (7) January 2010 (2) std::stringstreamとは C++の標準ライブラリ(STL)で定義されている文字列ストリームで、色々な型を文字列化する際に重宝するクラスです。 JavaのStringBufferクラスに似ています。 まず、簡単な使い方から見てみましょう

  • boost.iostreamsがおもしろい - in the box

    iostreamをかなり簡単に作れるようになるライブラリ。コンセプトとかその辺は私もあんまり理解してないので詳しくはこちらをどうぞ。 no title とりあえずフィルタやデバイスを繋げてみる。 #include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/tee.hpp> #include <boost/iostreams/device/file.hpp> #include <boost/iostreams/filter/gzip.hpp> #include <iostream> namespace io = boost::iostreams; // 標準出力に書き出すSink // 用意されてそうな気がするんだけどないっぽい。 template <typename Ch> class basic_st

  • テンプレート関数

    汎用関数 ここでは、C++言語の高い柔軟性の実現の一つ テンプレートについて、説明していきます テンプレートの概念は、オブジェクト指向で名高い Java にすらない、すばらしい機能です プログラムでは、内部処理は同じだがデータ型が異なる関数が頻繁に出てきます とくにアルゴリズムにおける関数では、その様なケースが多いです 全てのデータ型の関数をオーバーロードでサポートするのも一つの方法ですが この作業は面倒で、しかもソースの可読性も低下させてしまいます そこで、この作業を全てコンパイラに任せてしまうのが汎用関数なのです 汎用関数は、各データ型を受け取ることができます しかし、オーバーロードとは異なり内部処理は同じです このような汎用関数をテンプレート関数とも呼び 次のように template キーワードを用いて宣言します template <class type> function-decl

  • iostreamの拡張

    Last update 1999/09/22 iostreamの拡張 (C)平山直之 無断転載は禁止、リンクはフリー 誤字脱字の指摘は歓迎 iostreamの拡張について 例によって唐突ですが、iostreamの拡張について書いてみたいと思います。ここでいう「拡張」とは、自分でcinとかcoutみたいなものを作ろう、ということです。 「こんなもん一番最初に教えんなや」と比較的評判の悪いiostreamですが、 演算子オーバーロードがいわば「御法度」な使い方をされている メソッドの命名法がやたら変 などのように表面的に美しくないのが悪評の原因で、その辺に目をつぶれば実はそれなりによくできたシステムだったりします。 拡張方法も一度覚えると結構便利ですぜ。 iostream拡張の基礎知識 iostream、というと、そのインターフェイス(Java的な意味じゃなくて)であるところのstd::cin

  • STLのqueueとかstackとかが好きになるたった一つの方法 - 神様なんて信じない僕らのために

    全国1,000,000人のSTLファンのみなさんに朗報です。 STLのqueueとかstackとか使いにくくないですか? あれって、中身はlistとかqueueとかvectorのくせに使いにくくないですか? 触れるインターフェイスが少なすぎ、とか思ってないですか? 渡したコンテナを触れないときどうしてますか? 1.渡すコンテナを独自で作成し、インターフェイスは実装し中身は気合いでいじる できますが、queueやstackで渡されるコンテナは「コピー」なので相当醜いことになります。却下。 2.queueやstackをprotected継承してインターフェイスを拡張する 正解!! 移植性はないけど正解!! 移植性がないのはSTLには環境によって独自の実装があるからです。 しかし、多くの場合ちょっと書き換えるだけでこのテクニックが使えます。 これを使うと、 swapができるqueue(シュリンク

    STLのqueueとかstackとかが好きになるたった一つの方法 - 神様なんて信じない僕らのために
  • 本の虫: 確率分布の使い方

    C++0xのstd::randomには、様々な分布クラスが存在する。一体どうやって使い分ければいいのか。ここでは、ゲームにたとえて考えてみる。 もっとも簡単な分布は、一様分布(Uniform distributions)である。これは、a ≦ i ≦ b, の範囲の値iを、それぞれ等しい確率で返す分布である。 ゲームでいえば、サイコロやルーレットなどの実装に使えるだろう。 // 六面サイコロの実装 int main() { std::mt19937 rng ; // 一様分布 // 0から5までの数字を等しい確率で返す分布 std::uniform_int_distribution<> dice(0, 5) ; int a[6] = { } ; // 六面サイコロの出た目の回数を記録する配列 // 600回サイコロを振る for ( int i = 0 ; i != 600 ; ++i )

  • はてなブログ | 無料ブログを作成しよう

    ハリイカの焼売と中華炒め ハリイカをよく、見かけるようになりましたよ。生け簀で、泳いでいたものを一杯購入しました 立派な大きな墨袋や肝は冷凍保存して 柔らかな身は季節のお豆、お野菜と合わせて中華の炒めものに。新鮮なにんにくの茎は刻み、香り高く欲そそられますね 下足はミンチにし…

    はてなブログ | 無料ブログを作成しよう
  • アルゴリズム

    (このコンテンツはメールマガジンの STL & iostream 入門に手を加えたものです。「 STL と iostream が使えるかのチェック」等はメールマガジンの方のページをご覧ください) STL は主に次の5つから構成されています。アルゴリズム、関数オブジェクト、イテレーター、コンテナ、サポートクラスです。この中で最も重要なのが「アルゴリズム」です。他の4つはアルゴリズムのためにある、と言っても過言ではありません。というわけで、 STL の中でもまずこのアルゴリズムから見ていくことにします。 「アルゴリズム」という言葉は、一般的に「特定の結果を求めるための処理方法」という意味で使われています。たとえば「配列上のデータをソートする」などがアルゴリズムの一例です。 STL のアルゴリズムは、基的に「別物」と考えた方が分かりやすいと思います。使いこなせるようになれば「ああ、アルゴリズム

  • STLアルゴリズム練習帳

    STLアルゴリズム練習帳 by iijima ■要素のソート(1) sort, stable_sort / list::sort STLではいくつかのソートのアルゴリズムが提供される. ここでは,sort と stable_sort をとりあげる. 関数プロトタイプ: void sort( RandomAccessIterator beg, RandomAccessIterator end ); void sort( RandomAccessIterator beg, RandomAccessIterator end, BinaryFunc op ); void stable_sort( RandomAccessIterator beg, RandomAccessIterator end ); void stable_sort( RandomAccessIterator beg, Rand

  • 本の虫: C++0xの新しい乱数ライブラリ、random

    注意:最新ドラフトのN3000のrandomの規定は、コンセプトが却下される前の文面であり、今後、変更があると思われる。 C++は標準ライブラリが貧弱であるとは、よく言われることだ。ことに、乱数に関しては、貧弱の極みである。ご存じのように、C++は、Cから標準ライブラリを引き継いでいる。rand()だ。これは、0からRAND_MAXまでの値を返すと規定されている。RAND_MAXは実装によって異なるが、ほとんどの処理系では、32767である。現代の乱数需要を満たすには、あまりにも小さすぎる。 この状況を打破すべく、C++0xには新しい乱数のライブラリが盛り込まれた。randomである。これはBoostの実装を元にしているのだが、Boostとは少し違っている。今回はそのrandomを、浅く触りだけ紹介しようと思う。というのも、ライブラリの細かなメンバ関数の一つ一つまで説明するのは、甚だ冗長で

  • 本の虫: lambda 完全解説

    目的 この記事は、C++0xのlambdaを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からlambdaを恐れることなく使う物のC++0xプログラマになれるだろう。 lambdaとは何ぞや lambdaである。あるものは、lambda関数、あるいは無名関数という名称を使っている。いったいlambdaとは何なのか。 lambdaは関数である。また、特に名前はない。したがって、lambda関数、無名関数と呼ぶのは、間違ってはいない。しかしここでは、単にlambdaと呼ぶことにする。 lambdaを定義しよう lambdaは関数オブジェクトである。lambdaは関数オブジェクトである。これはとても大事なので二度書いた。lambdaは関数オブジェクト以外の何物でもない。ところが不思議なことに、皆lambdaが単なる関数オブジェ

  • 関数テンプレートの特殊化について - memologue

    関数テンプレートの特殊化いろいろ なんか日記を書くのを忘れていました。よくない。というわけで、最近おぼえたtipsを書きます。クラステンプレート内のテンプレートの特殊化(もどき)についての自分なりのまとめ。 まず、 namespace A { template<int V> static void YYY() { std::printf("default %d\n", V); } } int main() { YYY<0>(); YYY<128>(); } のような関数テンプレートがあるとき、これを特殊化*1した関数は namespace A { template<int V> static void YYY() { std::printf("default %d\n", V); } template<> static void YYY<128>() { std::printf("for

    関数テンプレートの特殊化について - memologue
  • C++マニアック,マニピュレータの作り方,how to make manipulator

    ここでは、入出力ストリームと共に使用するマニピュレータの作り方について解説します。マニピュレータは、関数でも、クラスでも実現できる少し毛色の変わったおもしろい存在です。マニピュレータを理解するにはオペレータのオーバーロードの知識が必須ですので、そちらもご覧ください。 マニピュレータとは 引数のないマニピュレータの作り方 引数のあるマニピュレータの作り方 グローバル関数として作成する方法 グローバルな関数オブジェクトとして作成する方法 クラスオブジェクトとして作成する方法 マニピュレータの応用例、printf 風マニピュレータ マニピュレータとは ページの先頭へ マニピュレータとは、cin、cout などを代表とする入出力ストリームに対する、挿入演算子 << や抽出演算子 >> と協調して、入出力フォーマットの変更を行うなどの目的で設計されたもので、標準ライブラリでは endl、setw、s

  • C++マニアック,ストリーム,stream の使い方

    ストリームの使い方 ストリームとは、C 言語での入出力用関数 printf、scanf などの代替という意味もあるのですが、もし cout、cin、cerr しか使っていないのであれば、それはかなり損をしています。何故ストリームなのでしょうか。 cout、cin、cerr 入出力先の切り替え ストリームオブジェクトの作成方法(その 1)、streambuf ストリームオブジェクトの作成方法(その 2)、ostream、istream cout、cin、cerr ページの先頭へ まずは、簡単なところから始めましょう。 cout、cin、cerr はそれぞれ、標準出力、標準入力、標準エラー出力のストリームの入出力に関連するクラスオブジェクトで、コンソールアプリケーションでは、main 関数に実行が移ったときに既にシステムによって構築され、使用できる状態になっています。これらは、次のように使いま

  • 関数の速度(3) - inamori’s diary

    前々回、expがsin/cosより速いのが気になった。 また、logがatanより速いのも気になった。 exp(x) 35ns sin(x) 45ns cos(x) 45ns log(x) 43ns atan(x) 87ns 数学的には、expとsin/cosは同類である。 logとatanもテーラー展開すれば似たようなものである。 それでも全然速度が違うのは不思議だ。 テーラー展開より連分数のほうが速いらしいので、 実際にはそちらを使うのだろう。 ここに、logの連分数展開が載っている。 http://www.tac.tsukuba.ac.jp/~yaoki/conf.pdf これらを素直にコードにすると、こうなる。 // Taylor展開 double log2(double x) { static const int N_log3 = 10; x -= 1; double y = x

    関数の速度(3) - inamori’s diary
  • C++: 水面下の仕組み - Microsoft Visual C++ Web Site

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

    C++: 水面下の仕組み - Microsoft Visual C++ Web Site
  • PythonMatrix:C++とPythonのコラボレーション

    【1】   概要 「SWIG」というC/C++コードを各種言語から 利用できるようにするラッパージェネレータがあるのをご存知でしょうか? ホームサイト: http://www.swig.org/ Allegro CL C# Chicken Guile Java Modula-3 Mzscheme OCAML Perl PHP python Ruby Tcl といった多彩なジェネレート出力が得られます。 このページでは当然Pythonからの利用を解説しますが、 実はPython標準ディストリビューションには SWIGとの連携をサポートする機能が最初から組み込み済みです。 つまり、他の言語利用よりもPythonとSWIGの組み合わせが最も親和性が高いといえます。 PythonとSWIGの連携実績は以下のように非常に有名なプロジェクトがあることもポイン

  • Charming Python: Functional programming in Python, Part 3

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    Charming Python: Functional programming in Python, Part 3