タグ

ブックマーク / minus9d.hatenablog.com (6)

  • Visual Studio Codeで等幅フォントを使う - minus9d's diary

    Visual Studio Codeはデフォルトだと日語が等幅で表示されません。 そこで以下の手順により、日語がある場合でも等幅で表示されるようにしました。 公式ページ から Myrica.ttc をダウンロードし、インストール 半角文字と全角文字の横幅の比が 1:2 なことからこのフォントを選定。 他にも 等幅フォント比較:プログラミング用 - Qiita で紹介されているフォントが使えそう Visual Studio CodeでCtrl + ,して設定を呼び出し、"font family"の欄に'Myrica M'を追加 その結果、以下のようにいい感じに文字が表示されるようになりました。 (2019/5/9追記) 最新のWindows 10にバンドルされているBIZ UDフォント(モリサワ、「BIZ UDフォント」の「Windows 10 October 2018 Update」採

    Visual Studio Codeで等幅フォントを使う - minus9d's diary
  • gprofを使いこなす - minus9d's diary

    C/C++のコードの速度を改善するときに有効な方法は、処理時間を多く消費する関数を見極めて、その関数を改善することである。どの関数が(1)どれだけ処理時間を消費するか、(2)何度呼ばれているか、(3)どの関数を呼んでいる/どの関数に呼ばれているか、などを測定する行為をプロファイリングといい、その手助けをするツールをプロファイラと呼ぶ。今回はC/C++のプロファイラとして有名なgprofの使い方を紹介する。 プログラムの例 GNUプロファイラーによるコード処理速度の向上 のコードを参考にして作成した以下のコードをgprofでプロファイリングしてみよう。main()はa()とb()を100000回呼ぶ。b()はa()の約4倍時間を消費する。またmain()自身も、a()とb()を呼び出してその結果を待つ以外に、a()の約1/3の時間を消費する。 // main.cpp #include <cs

    gprofを使いこなす - minus9d's diary
  • C言語でOpaqueポインタを使って構造体のメンバを隠蔽する - minus9d's diary

    C言語で、自作の構造体のメンバをユーザに開示しないテクニックとして、Opaqueポインタというものが知られています。今回は、書籍「C++のためのAPIデザイン」の3.1.6節を参考に、Opaqueポインタを使う簡単なサンプルを紹介します。 Opaqueポインタを使わない場合 人に関するデータを集めた構造体Personと、その構造体を使ったライブラリを作成することを考えます。以下にPerson.hのコードを示します。 #pragma once typedef struct _Person { int age; } Person; // 以下、Person構造体に関するAPI Person* createPerson(int age); // Person構造体のオブジェクトを生成 void printPerson(Person* ptr); // Person構造体を使った操作(メンバのプリ

    C言語でOpaqueポインタを使って構造体のメンバを隠蔽する - minus9d's diary
  • Makefileの書き方に関する備忘録 その3 - minus9d's diary

    この記事は続き記事です。目次→Makefileの書き方に関する備忘録 - minus9dの日記 変数に何を入れるか .cから.oへのコンパイルには以下の暗黙的なルールが使われる。 $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@.ccから.oへのコンパイルには以下の暗黙的なルールが使われる。 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@これらの変数には、以下のルールに従って値を入れるのがよさそう。 $(CC): Cのコンパイラを指定。cc, gcc, armcc(ARM用のコンパイラ)など $(CXX): C++のコンパイラを指定。g++など $(CPPFLAGS): C/C++共通で指定したいフラグを入れる。-I/usr/include, -O2など $(CFLAGS):

    Makefileの書き方に関する備忘録 その3 - minus9d's diary
    iww
    iww 2017/08/22
    $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
  • mapでキーの有無を調べるには、find()よりcount()が便利 - minus9d's diary

    mapコンテナ(mとする)でキーの有無を調べる場合、今まではメンバ関数のm.find()を呼ぶ方法を使っていた。m.find()を使う方法では、「m.find()の戻り値がm.end()に等しければキーが存在しない、そうでなければキーが存在する」としてキーの有無を判別していた。 しかし、m.count()を使った方がより直感的である。m.count()を使う方法では、「m.count()の戻り値が0に等しければキーが存在しない、1に等しければキーが存在する」という簡単仕様なので分かりやすい。 以下のコードでは、find()を使う場合とcount()を使う場合とを比較した。どちらも結果は同じである。 #include <iostream> #include <map> using namespace std; bool has_key_using_find(map<int, string>

    mapでキーの有無を調べるには、find()よりcount()が便利 - minus9d's diary
  • C++の文字列操作 - minus9d's diary

    以下、すべて #include <sstream> #include <iostream> using namespace std; と書いてあるものとする。 数字から文字列へ変換 int i = 10; ostringstream sout; sout << i; string s = sout.str(); cout << s << endl; 文字列から数字へ変換 string str = "123.456"; istringstream sin(str); double num; sin >> num; cout << num << endl; 文字列のフォーマット ostringstream sout; sout << "value is " << 100; string formatString; formatString = sout.str(); cout << forma

    C++の文字列操作 - minus9d's diary
    iww
    iww 2012/07/20
  • 1