タグ

c++に関するthorikawaのブックマーク (14)

  • C++ の string と vector の reserve() の挙動 - bkブログ

    C++ の string と vector の reserve() の挙動 C++ の string と vector には前もって容量を確保するための reserve() というメンバ関数があります。何気なく使っていた関数ですが最近になって興味深い挙動に気づきました。 reserve() の基 string と vector の reserve() は前もって容量 (capacity) を確保しておくためのメンバ関数です。前もって容量を確保 (reserve) しておけば、データの追加時に発生する再割り当て (reallocation) を防ぐことができ、効率的です。 たとえば、何もしないで文字列に 1,000文字追加した場合、(内部的に倍々で容量を増やしていくため)10回程度の再割り当てが発生しますが、 s.reserve(1000) のように容量を確保しておけば 1回の割り当て (

  • Windows Programing Tips

    1 はじめに 環境はVisual C++ .NET (2000 or 2003) + DirectX SDK 8.1b.VC6でも通用することが多いと思う. 2 printf デバッグ もっとも原始的なデバッグ法はやはりprintfであろう.要するにコードの怪しいところで変数の値をコンソールに書き出すだけである. Unixで開発しているときは自然と端末を使っているため,単にprintf (バッファリングされると困るので実際はfprintf( stderr, ... )だろう)を使うだけだが,WindowsGUIアプリを開発しているとコンソールが無いためどうしよう…となってしまう. そこで以下の2つ解決策を考えてみる. デバッガに出力する.つまりVisual Studioのデバッグ画面(○○.dllを読み込みました…とか出るウィンドウ)に表示させる.これにはOutputDebugStrin

  • http://sugi.sakura.ne.jp/soft/stl/vector.html

    thorikawa
    thorikawa 2010/08/19
    vectorとか参照渡し、値渡し、ポインタ周りの話
  • printf関数をラップする【C言語】 - Programming Magic

    デバッグ用に文字列をコンソールとファイルに出力する関数を作ろうと思ったのだが、printf関数やfprintf関数のように可変長な引数を取り、その引数をprintf関数に渡す関数をどう作ったらいいのかがわからなかったので調べてみた。 可変長引数の関数の作り方に関しては「ロベールのC++教室 - 第16章 仰山の引数 -」ですぐに見つかった。今回の場合、以下のような関数を作ればいいということだ。 // ログの出力 void OutputLog(File *fp, const char* format, ...){ va_list arg; va_start(arg, format); /* コンソールやファイルに出力する処理。 */ va_end(arg); } ただ問題はどうやってその引数をprintf関数やfprintf関数に渡すかというところだった。調べても可変長の引数をprintf関

  • [C++]なぜ std::stack の pop() は void なのか

    std::stack<> を使うたびにいつも思うのですが、何で pop() の戻り値は void になっているのでしょうか? このせいでわざわざ top() で先頭の値を持ってきて一時変数に確保した後 pop() を実行する必要があります。 std::stack<int> st; st.push(10); // int n = st.pop(); // こうやって書くことが出来ない int n = st.top(); st.pop(); これについてずっと不満を覚えていたのですが、最近 Exceptional C++ を読んで、なぜ void になっているのか、というのを知りました。 pop() が void になっている理由は、例外安全を保証するためだそうです。 例えば T を返す pop() メソッドの実装は、次のように書くことが出来ます。 T pop() { assert(size_

  • Microsoft Word - n2341.doc

  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

  • 2次元配列へのラスタ捜査 - lab.comp@wiki

    std::fill( a.data().begin(), a.data().end(), int( 0 ) );

    2次元配列へのラスタ捜査 - lab.comp@wiki
  • personal::reminder : boost::numeric::ublas 行列やベクトルを配列化する

    2007年12月21日05:23 by goel0725 boost::numeric::ublas 行列やベクトルを配列化する カテゴリ 必要ライブラリ boost 必要ヘッダ #include <boost/array.hpp> #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> サンプルコード // 2つの行列を要素として持つ配列matを作成する // ただし,行列の大きさはこの時点では0x0 boost::array<boost::numeric::ublas::matrix<double> , 2> mat; mat.at(0).resize(2, 2); // 行列0の大きさを2x2に変更する mat.at(0)(0, 0) = 1; mat.at(0)(0, 1

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

    週報 2024/04/28 川はただ流れている 4/20(土) 初期値依存性 さいきん土曜日は寝てばかり。平日で何か消耗しているらしい。やったことと言えば庭いじりと読書くらい。 ベランダの大改造をした。 サンドイッチ 一年前に引っ越してからこんな配置だったのだけど、さいきん鉢を増やしたら洗濯担当大臣の氏…

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

    アルファベット順ライブラリリスト カテゴリ別ライブラリリスト 文字列とテキスト処理 コンテナ イテレータ アルゴリズム 関数オブジェクトとより高位のプログラミング ジェネリックプログラミング テンプレートメタプログラミング プリプロセッサメタプログラミング 並列プログラミング 数学と計算 正当性とテスト データ構造 入出力 言語間サポート メモリ 構文解析 その他 不完全なコンパイラの回避手段 どのライブラリがどのコンパイラで動くかを理解するには Compiler Status. ライブラリのダウンロード,ビルド,インストールについてはGetting Started. アルファベット順ライブラリリスト any - 異なる型のひとつの値を格納できる、安全で汎用的な入れ物。Kevlin Henney 作 array - STL に準拠した定数サイズの配列のラッパコンテナ。Nicolai Jos

  • Eigen

    Get it The latest stable release is Eigen 3.4.0. Get it here: tar.bz2, tar.gz, zip. Changelog. The latest 3.3 release is Eigen 3.3.9. Get it here: tar.bz2, tar.gz, zip. Changelog. The latest 3.2 release is Eigen 3.2.10. Get it here: tar.bz2, tar.gz, zip. Changelog. The unstable source code from the master is there: tar.bz2, tar.gz, zip. To check out the Eigen repository using Git, do: git clone ht

    thorikawa
    thorikawa 2009/10/14
    行列演算などができるc++のライブラリ
  • ポインタ虎の巻~多次元配列の実現

    面白いことに、p == *p である。これはポインタが指す対象が配列でありポインタではないから、間接参照が生成されないのである(逆に言えばポインタの場合には、*p が間接参照をして、p != *p になる)。 上の表の結果と、二次元配列のシンボル x は、実質上一次元配列であることから、次のキャストは成功することになる。 int *p = (int *)x; だから次のように書ける。 int x[10][10]; int i; int *p = (int *)x; for( i = 0; i < 100; i++ ) { *p++ = i; } printf( "x[5][5] = %d\n", x[5][5] ); これは x が実質上一次元のポインタであることを示している。 この事情は関数引数の場合も同様である。二次元配列とポインタは混同されず、しかし int (*p)[10] とは一

    thorikawa
    thorikawa 2009/10/14
    ポインタと多次元配列の関連性
  • Google C++スタイルガイド 日本語訳

    Text Drop 翻訳、プログラミング、写真、カメラなどについて書いてます。スタイルガイド/コーディング規約やチートシートなど、ちょっと便利なものを翻訳しています。 TEXTdropでは、C++プログラマーも利用できるパワフルな機能を搭載。C++のコードを書く際に行う手順や避けておきたい工程などを詳しく説明しています。コードスタイルラインの日語版では、日語訳やJ P Yへの換金もサポート。話題性があるオンラインカジノ 日円変換や入金の際のバグにも対応しています。統一性のあるコードを書くためのポイントや規約の種類を参考にする事ができます。

  • 1