タグ

C++に関するsatojkovicのブックマーク (116)

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!

    kazuhoさんがやってくれました。 ずいぶん前からjsonをC++でパース(SAXじゃなくてDOM)するのに小さいライブラリないかなーと思ってました。個人的にはjson-cというのを使ってたのですが、幾らか気に入らない所があったりビルドが少し手間だったりしていました。STLしか使わなくてvectorとかmapで表現されるツリー構造な物が欲しいなぁって思ってたんです。 とあるIRCで昨日、kazuhoさんと「ほしいですよねー」という話から始まって、githubにあるjsonxxとかも物色しながら「いいのないねー」とか言ってたらkazuhoさんが「もすこし綺麗に書けそう」って言い出して朝から格的に書き始めてついさっき出来上がりました。速いw 名前はpicojson とても小さく、実装コードだと300数十ステップ程です。しかもヘッダファイルだけなので管理が楽です。 試しにwassrのpubl

    Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!
  • C++で木構造扱う軽めなクラス書いた – taichino.com

    picojsonを見ていて最近のC++のライブラリはこんなにカッコいいのかと思って、僕もヘッダオンリーのC++コードを何か書きたくなったのですが、ちょうどC++で木構造を扱えるライブラリがなかなか見つからなかったので軽い感じのクラスを書きました。コードはgithubにあります。名前はpicojsonに影響を受けまくってmicrotreeにしました。 使い方は以下のようなノリになります。STLにあわせてテンプレートな感じにしようかとも思ったのですが、Pythonnetworkxというグラフを扱うライブラリが使いやすいので、それに似せる感じで各ノードがキーとプロパティマップを持つようにしました。 #include "microtree.h" using namespace std; using namespace microtree; int main(int argc, char** ar

  • C++クラス設計に関するノート

    C++が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。よくよく注意しないと、削除し忘れたり、同じオブジェクトを2度削除してしまうというエラーが発生します。このノートでは、オブジェクトを「値オブジェクト」と「参照オブジェクト」というカテゴリに分け、詳細設計の段階で注意すべき点を整理しておきたいと思います。 0. はじめに 私自身今までいくつかのプログラミング言語を使ってきましたが、C++ が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。例えば、 Person* person = new Person(); と生成したオブジェクトは、使い終わったら次のように削除しなければなりません。 delete person; 生成してすぐ削除するなら簡単なのですが、実際に

    C++クラス設計に関するノート
  • Introduction to boost test

    参考: https://github.com/ruby-llvm/ruby-llvm/tree/master/samples https://github.com/Kmotiko/DummyCCompiler http://kschiess.github.io/parslet/ https://github.com/ruby-llvm/ruby-llvm https://github.com/cuzic/llvm-kitsunesan

    Introduction to boost test
  • C++でテスト駆動開発

    SonicGarden Study #11で放送された資料から一部スライドを抜いたものになります。 http://sonicgarden.doorkeeper.jp/events/13229 ----- 優れたプログラマだけが優れたソースコードを書くことができます。 では優れたプログラマになるにはどうすれば良いでしょうか。 自分の書いたコードを、優れたプログラマに指摘してもらうことが一番の近道です。それがコードレビューです。たった一人でコードレビューも受けずに、ただ書き続けてもクソコードはクソコードのままなのです。 そこで今回は、良いコードが書けるプログラマになるための、コードレビューを上手に実践する秘訣を話します。

    C++でテスト駆動開発
  • C++ のテストフレームワークを選ぶポイント - Cube Lilac

    Boost.勉強会 #8 大阪 に参加してきました。発表者、運営者の皆様お疲れ様でした。今回もいろいろと黒魔術的な発表があり「これが変態かー」と感慨深く見ていたのですが、それはそれとして、個人的に気になっていたテーマとして「C++ でのテスト」に関連する発表が 2 件ほどあったので、楽しみにしていました。 C++でテスト駆動開発 - @akineko Boost.Testの紹介 - @hotwatermorning C++ のテストフレームワークも数多く公開されており、好みや用途によって選択肢が変わって来るのですが、まぁ今だと選択肢として挙がるのは「Boost.Test か googletest か」になってくるのかなと思います。どちら(もしくは、上記以外を含めたどれか)を選択すべきか、と言う問いに対しては、残念ながら現状でも決め手となるものに欠けているのですが、自分が利用する上で選択する

    C++ のテストフレームワークを選ぶポイント - Cube Lilac
  • C++のTips - 四捨五入を行うには?:tech.ckme.co.jp

    もし、C99が使える環境であれば、round()という関数が用意されている。これは、小数点以下を四捨五入した整数値(ただし型はdouble)を返す。 次にC99が使えない環境の場合であるが、まず数値が常に正の値であるならば、小数点以下を四捨五入を行うには、0.5を足して、小数点以下を切り捨てればよい。 具体的には、 a=123.456; a+=0.5; a=int(a); の様に書くと、aは123になる。 小数第何位で四捨五入をしたいという場合は、その位分を最初に掛けて、整数での四捨五入後、同じ数字で割ってやればよい。 具体的には、 a=123.456; a*=100; a+=0.5; a=int(a); a/=100; としてやると、aは123.46になる。 逆に大きい位で四捨五入をする場合は、最初に位分で割って、整数での四捨五入後、同じ数字を掛けてやればよい。 具体的には a=123.

  • std::basic_stringで戯れる - エンジニアのソフトウェア的愛情

    std::vectorの連結で演算子が使えない、という話題に対して。 どういう話かというと、こういうことです。 #include <iostream> #include <vector> #include <algorithm> #include <iterator> int main(int, char* []) { std::vector<int> v1; std::vector<int> v2; v1.push_back(10); v1.push_back(20); v1.push_back(30); v2.push_back(100); v2.push_back(200); v2.push_back(300); // v1 += v2; // これをやりたいけど、こうは書けない v1.insert(v1.end(), v2.begin(), v2.end()); // これが一般的

    std::basic_stringで戯れる - エンジニアのソフトウェア的愛情
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • vprintf() - 若葉プログラミング塾 関数

    このマクロの目的 va_argマクロは、可変長引数を取得する。 定義 #include <stdarg.h> type va_arg(va_list ap, type); 働き このマクロは、二番目の引数と同じ型の返り値を持つ表現(expression)に展開される。 va_list 型の ap は va_start() で初期化されたものである。 va_arg の実行によって、 ap は順番に引数を返すように変更される。 引数の型 type は、実際の引数の型へのポインタ型であり、特定された型は type の前に*を添えることで取得できるように決定される。 ありもしない引数を取得しようとしたり、引数の型が違っていた場合の振る舞いは未定義である。 va_start() 後の最初の実行では、 va_start() で指定した parmN の直後の引数の値を返す。 続けて実行すれば、残りの引数

  • [C/C++規格: 7] 配列を()で初期化 | Yoh2の日記 | スラド

    掲示板で話題に上って初めて知った。 今までダメだと思っていたけど、配列をnewする時、空の初期化子"()"を付けて初期化できるみたい。 つまりこんな感じに書けるということ。 JIS X 3014:2003を読み直してみると、確かに配列に初期化子を付けてはいけないとはどこにも書いていない。 ただ、引数のある初期化子の場合、引数をnewする型に変換できたり、コンストラクタが定義されたりしていなければならいため、結果的に配列に引数付きの初期化子が使えない、というだけ。 そして引数なしの初期化子は値初期化される、とある。そして値初期化は配列に対してもその挙動が定義されているため初期化できる、という寸法。 今までずっと

  • new 配列の初期化 - KBDAHOLIC - やぬすさんとこ

    new で配列確保と同時に初期化ってできなかったっけ ? と思って調べてみたら default constructor をもっている class type や arithmetic, enumeration, pointer, pointer-to-member type なら以下のように書くことができるらしい。 class bullet {}; int main(void) { const unsigned int MAGAZINE_MAX = 100; const unsigned int BUF_SIZE = 0xffff; // initialize 100 bullets with the default constructor bullet() bullet* bullets = new bullet[MAGAZINE_MAX](); // initialize a buffe

    new 配列の初期化 - KBDAHOLIC - やぬすさんとこ
    satojkovic
    satojkovic 2012/07/31
    へーなるほど
  • Google Code Archive - Long-term storage for Google Code Project Hosting.

    satojkovic
    satojkovic 2012/07/29
    random forests c++ library
  • const の取り扱い - Cube Lilac

    constメンバ関数は重要 - Faith and Brave - C++で遊ぼう より. const と言うキーワードは C++ の中でも重要な位置を占めています.そのせいもあってか,「コメントで IN とか OUT とか書く位なら const 使えバカ」「Effective C++ に載ってるんだから const 使え」と言ったような手厳しい意見も聞かれます.一方で,その使用範囲の広さからか「const って良く分らないし・・・」「要は,(プログラマが)気を付けてれば良いんでしょ?」「こまけぇこたぁいいんだよ!!」と言った声も聞かれます. 今回は,そんな const について少し記述してみます. おさらい #include <iostream> #include <string> /* --------------------------------------------------

    const の取り扱い - Cube Lilac
  • コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog

    これよりも Hoge::Hoge(const string& initName) { this->name = initName; }これを使いましょうという話。 Hoge::Hoge(const string& initName) : name(initName) { } 理由は、初期化リストではstringのコピーコンストラクタのみが実行されるのに対して、コンストラクタでの代入では、コンストラクタ・代入が行われて効率が良くないから。 またメンバの name がもし仮に const であるならば(これは良くあることだが)、そもそも初期化リストでしか初期化できない。 代入を使うほうが理にかなっているというシチュエーションもあり、(大量組み込み型データメンバーの場合)、その詳細は、Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison We

    コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog
  • Armadillo: C++ library for linear algebra & scientific computing

    Armadillo C++ library for linear algebra & scientific computing Armadillo is a high quality linear algebra library (matrix maths) for the C++ language, aiming towards a good balance between speed and ease of use Provides high-level syntax and functionality deliberately similar to Matlab Useful for algorithm development directly in C++, or quick conversion of research code into production environme

  • C++のvectorの解放について - C++のvectorに自作の構造体をpush_backするといったことをしているのですが... - Yahoo!知恵袋

    vectorは、デストラクタが呼び出されると、メモリの解放が行われます。インスタンスのスコープを抜ける時、解体の直前で自動的に呼び出されます。最終的には解放されますが、その間で、要素を変えた場合は、下記の通りです。 vectorは内部に一括確保した領域を保持していて、この領域が足りなくなる時、新しくより大きな領域を確保して、既存の要素をコピーします。その後、古い領域は解放されてなくなります。 しかし、要素を削除した場合は、内部の領域が縮小する事はありません。領域が縮小されないということは、一度確保してしまった領域は、不要になってもメモリを返却してくれないという事です。 その場合、swap技法を使えば、強制的に領域を切り詰めることは可能です。 std::vector<int>(array).swap(array); 一時オブジェクトを作り、既存のvectorをコンストラクタの引数に渡します。

    C++のvectorの解放について - C++のvectorに自作の構造体をpush_backするといったことをしているのですが... - Yahoo!知恵袋
  • std::vectorのメモリ解放

    2009年の抱負は、ダイエットと質素倹約である。 ダイエットは早くも挫折しそうだが、質素倹約はいい感じである。 今のペースだと給与の3/4は貯蓄できそうだ。 抱負の追加として、この日記を一日一回更新にしようと思う。 以前は携帯電話のプログラムだったので、それなりにいろいろ書けたが 今はPSPをやっているので、まったく日記を書くことができない。 でも、日記は書きたいので、プログラムに関する些細なことを毎日書いていこう。 vecotrで確保したメモリは、clearメソッドを呼んでも解放されず デストラクタが来るまではずっとメモリを確保している。 そこで、以下の方法で解放することができる。 std::vector<int> hoge; // hogeのresizeとclearを繰り返す。 // 解放 std::vector<int>().swap(hoge); 一時オブジェクトを作成し、そのオブ

    std::vectorのメモリ解放
    satojkovic
    satojkovic 2012/07/19
    std::vectorのメモリ解放のやり方。
  • mlpack - Home

    written in C++ and built on the Armadillo linear algebra library, the ensmallen numerical optimization library, and the cereal serialization library. aims to provide fast, extensible implementations of cutting-edge machine learning algorithms. Read the release announcement.