タグ

C++に関するzetamattaのブックマーク (135)

  • C/C++ 迷信集 | 株式会社きじねこ

    C/C++ を使うプログラマは大勢います。しかし、その多くは OJT を通して言語を学んだのではないでしょうか? 実はそこに大きな落とし穴があります。 コンピュータや工学のことをよく知らない人たちは、時代の先端を歩むプログラマには「迷信」など無関係だと信じて疑わないかも知れません。しかし、迷信や誤解はどんな世界にも常に存在しています。 というわけで、ここでは C/C++ にまつわる迷信、誤解、よくある間違いを採り上げていきます。非常に後ろ向きな企画ですが、暇つぶし気分転換に読んでみてください。もしかすると、ご自身が迷信にとらわれていたことに気付くかもしれません。 追記(2009/03/15) このコーナーでは、C/C++ にまつわる迷信、誤解、よくある間違いを扱っています。決して「迷信」だけではないのですが、タイトルにはすべて[迷信]を付けています。 これは、主に検索エンジンでタイトルを見

    zetamatta
    zetamatta 2015/07/26
    お、おう
  • GitHub - dropbox/nn: Non-nullable pointers for C++

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - dropbox/nn: Non-nullable pointers for C++
    zetamatta
    zetamatta 2015/07/26
    NULLにならないスマートポインタ「nn_shared_ptr<T>」
  • unorderd_setやunorderd_mapのキーに任意のクラスを渡す - Qiita

    unorderd_setやunorderd_mapのキーに自作クラスを渡す方法です。 set,mapはこちら。 mapでは不等号が必要でしたが、unorderd_mapでは等号とハッシュ関数が必要です。 等号はoperator==で良いのですが、ハッシュ関数の与え方がstd::unorderd_mapとboost::unorderd_mapでは違うようです。 クラスに同値、ハッシュをもたせる(std版) まずはstd::unorderd_map版です。 std名前空間にテンプレートの特殊化を使ってhashという名前で定義します。 #include <unordered_map> class Point{ public: int x, y; Point(){} Point(int x, int y):x(x),y(y){} bool operator==(const Point &left)

    unorderd_setやunorderd_mapのキーに任意のクラスを渡す - Qiita
    zetamatta
    zetamatta 2015/07/08
    もっと早くこれをしりたかったー
  • setやmapのキーに任意のクラスを渡す - Qiita

    #include <map> class Point{ public: int x, y; Point(){} Point(int x, int y):x(x),y(y){} }; int main(){ typedef std::map<Point, int> PointMap; PointMap pmap; return 0; } この時点ではエラーが出ませんが、insertを使う時にエラーが出ます。 mapはキーをソートするために比較する必要があるので、それを定義しないといけません。 クラス同士を比較できるようにする operator<を追加します。 特に何も考えない場合、これが一番楽です。 #include <map> class Point{ public: int x, y; Point(){} Point(int x, int y):x(x),y(y){} bool oper

    setやmapのキーに任意のクラスを渡す - Qiita
  • 一時オブジェクトの寿命と右辺値参照、ムーブセマンティクスのお話 - Qiita

    仰々しいタイトルですみません。 それぞれが絡み合ってるのであんまり綺麗にまとまっていませんが、一時オブジェクト、右辺値、左辺値、ムーブセマンティクスのお話をします。 4/11 ideoneへのURLをコード例の下に追記しました。 飛ぶと実際に実行した様子を見ることが出来ます。 一時オブジェクト ( = 右辺値 ) 一時オブジェクトは、右辺値と同等の意味合いで使われます。 すなわち、関数の戻り値、コンストラクタによって生成された直後のインスタンス、リテラルなどもここに入れることができるでしょう。 基的に一時オブジェクトはその式( expression )が評価された時点で破棄されます。 struct something { ~something() { std::cout << "destructor" << std::endl; } }; something func() { retur

    一時オブジェクトの寿命と右辺値参照、ムーブセマンティクスのお話 - Qiita
    zetamatta
    zetamatta 2015/04/10
    C++ 分からない
  • A C++ Container Pretty-Printer

  • csv_wrap(std::cout, ",") << 1 << 2 << 3; で1,2,3と出力する - Qiita

    class csv_wrap { std::ostream &ost; std::string comma, endl; bool is_first; bool is_flush; public: csv_wrap(std::ostream &ost, std::string comma, bool is_flush = true, std::string endl = "\n") : ost(ost), comma(comma), endl(endl), is_first(true), is_flush(is_flush) { } ~csv_wrap() { if (is_flush) { ost << endl << std::flush; } else { ost << endl; } } template <typename T> csv_wrap &operator<<(cons

    csv_wrap(std::cout, ",") << 1 << 2 << 3; で1,2,3と出力する - Qiita
  • C++ の STL にて printf() の 如く 文字列を 整形す - Qiita

    #include <iostream> #include <iomanip> std::cout << std::setfill('0') << std::setw(4) << std::hex << i; Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up

    C++ の STL にて printf() の 如く 文字列を 整形す - Qiita
    zetamatta
    zetamatta 2015/02/13
    なに、このウルトラC > std::cout<<boost::format("%04X")%i;
  • C++の記号一覧 (List of C++ symbols) - gununuの日記

    検索のしづらいC++の記号の意味をまとめてみました。C++11、C++14をはじめとして網羅的に集めたつもりです。 C言語についての記述もありますが、共通した記号であってもC++とCでは文法や動作の子細が異なる場合がありそのまま適用できないことがあります。また掲載してある記法は説明のために載せているのであってすべてが推奨できるわけではないことにご注意ください。用語や分類、解説はかなりいい加減です。 型[要素数]配列型(要素数は定数でなければならない。要素数を省略した型は不完全型)。 typedef int array[5]; //配列型int[5]にarrayという名前を付ける。 void f(int ptr[]); //関数の宣言に用いてvoid f(int* ptr);と同じ void f(int ptr[5]); //この場合要素数の記述は無意味で上記と同じ。 //動的配列の確保(ま

    C++の記号一覧 (List of C++ symbols) - gununuの日記
    zetamatta
    zetamatta 2015/01/25
    おぉ、検索がしづらい、C++ の「記号まみれの言語仕様」が一覧化されていて、す、すごく分かりやすいです。
  • C++マニアック,C++言語,STL,sort,ソート,algorithm,アルゴリズム,使い方,pred,predicate,プレディケート,述語

    C++マニアック C++言語,STL,sort,ソート,algorithm,アルゴリズム,使い方,pred,predicate,プレディケート,述語 ページの末尾へ トップページへ sort(ソート) このページでは STL のアルゴリズムである sort の使い方について解説します。 基的な使い方 並べ替えの判断基準を変更する 大小関係の比較について プレディケートのバラエティ 英文字文書を読んで、文字数の頻度順にソートする例 身長や体重など複数の基準でソートする例 基的な使い方 ページの先頭へ sort は、いわゆる並べ替えを行うアルゴリズムです。並べ替えることが出来るのは、通常の配列や、vector などのランダムアクセスイテレータが使えるコンテナの中身と言うことになります。list などは、ランダムアクセスできないので、ソートできませんが、list にはそ

  • それでも Boost.Optional を使う、大きく分けて2つくらいの理由 - 野良C++erの雑記帳

    Boost.Optional Must Go - 野良C++erの雑記帳 Boost.Optional Must Go (2) - 野良C++erの雑記帳 最近、何回かに分けて、 Boost.Optional について、(細かい)不満を日記に書いてきました。 これは別に Boost.Optional が嫌いだから不満を書いた訳ではなく、むしろ その逆、 Boost.Optional が便利な分、逆に不満点が目立つので書いていたわけですが、 よく考えたら、 Boost.Optional の便利さを、纏まった記事で書いていないなー、 と、そう思い至ったので、この辺で Boost.Optional を徹底的に推奨する記事でも書いてみようかな、 というわけで、さんざん既出なネタばかりですが、折角なので書いてみることにしましたよ。 冒頭に挙げた以外で参考になるような記事は、この辺でしょうか: C++

    それでも Boost.Optional を使う、大きく分けて2つくらいの理由 - 野良C++erの雑記帳
    zetamatta
    zetamatta 2015/01/18
    使いたくなってきた
  • GCC 5.0のC++関係機能 - Faith and Brave - C++で遊ぼう

    https://gcc.gnu.org/gcc-5/changes.html 網羅的ではなく、気になったものだけ抽出して書いています。 C++11、C++14関係の対応状況は、cpprefjpサイトにもほぼ反映しました。 C++14を全実装 変数テンプレート 宣言時のメンバ初期化を持つ型の集成体初期化を許可 constexprの制限緩和 サイズ付きデアロケーション -std=c++14オプションが使えるようになる。旧-std=c++1yオプションは非推奨。 C++11周りのライブラリサポート改善 std::listのsize()メンバ関数が、デフォルトでO(1)になる std::dequeとstd::vector<bool>に、ステートフルアロケータのサポートを追加。 iostreamのクラスに、ムーブとswapのサポートを追加。 std::alignとstd::aligned_union

    GCC 5.0のC++関係機能 - Faith and Brave - C++で遊ぼう
  • gccをwindowsで使うならstd::random_deviceを使ってはいけない - Qiita

    gccのstd::random_deviceはwindowsではmt19937、linuxまたはosxでは/dev/urandomを使っています。 mt19937を使う場合、シードはtokenパラメータで決めます。 std::random_device("mt19937")ならシードは5489に固定され、 std::random_device("12345")ならシードは12345になります。 でもtokenを数値にすると一部のシステムで例外がスローされます。 結論からするとstd::random_deviceは使わないのが吉です。 最初からmt19937を使うか、自分でラッパー関数を書くかにするべきです。 ソースコード https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/src/c%2B%2B11/random.c

    gccをwindowsで使うならstd::random_deviceを使ってはいけない - Qiita
    zetamatta
    zetamatta 2014/12/14
    あかんやん!
  • STLコンテナ&MFCコレクション

    概要 コレクションクラス(非テンプレート) コレクションクラス(テンプレート) CArrayクラス要素数の拡張 要素に自前クラスを使う場合 CListクラスを使ったデータ構造例 CList全件アクセスサンプル STLコンテナの使い方 STLコンテナの種類 STL map C47867 ワーニング STL map sample 概要 どちらも他の複数のオブジェクトを格納できるオブジェクト(さまざまなデータ構造をもつ配列) STLコンテナ イテレータという一種のポインタでデータへのアクセスをすることができる。 テンプレートとして定義されていてタイプセーフ。コンテナの消滅時にはその各要素にその型のデストラクタが起動される。ロジック上後始末処理を記述しなくてよい。(デストラクタが定義されていればよい) イテレータで個々の要素にアクセスしていれば、コンテナの種類を切り替えるの

    STLコンテナ&MFCコレクション
    zetamatta
    zetamatta 2014/12/09
    あ、これ、分かりやすいな
  • C++03 と C++11 の互換性 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    C++03 と C++11 ってどれぐらい互換性があるのかなーと気になっていたんだけど、仕様書の §C.2 を見てみたらずばりなものが載っていたので、一通り読んでみた。 C++03 のコードを C++11 として動かそうとしたときにコンパイルエラーやランタイムエラーが発生したら、これを確認してみるといいかも。 新しい文字列リテラル R, u8, u8R, u, uR, U, UR, LR という新しい文字列リテラルが追加されたため、文字列と一緒にこれらのマクロを使った場合、互換性の無いコードになる可能性がある。 例えば以下のコードは互換性の無いコードである。 #define u8 "abc" const char* s = u8"def"; // C++03 なら "abcdef"、C++11 なら "def" になる ユーザはこの手の短いマクロをよく使うため、この問題はよく発生しそうに見

    C++03 と C++11 の互換性 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
    zetamatta
    zetamatta 2014/12/08
    auto は C++11 でしたかー
  • Visual C++ - Visual Studio 2010 の C++ と MFC での新機能の詳細

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 Visual Studio 2010 での C++ と MFC の新機能の詳細 Sumit Kumar Visual Studio 2010 は、C++ の開発者に大きなメリットをもたらします。Windows 7 で提供される新機能を利用する機能から、大規模コード ベースで作業するために強化された生産性機能まで、あらゆる C++ 開発者向けに新機能が導入され、機能強化が施されています。 今回の記事では、C++ の開発者がこれまでに直面した一般的な問題のいくつかを、マイクロソフトがどのように解決したかについて説明します。具体的には、Visual Studio 2010 では、近々リリースされる C++0x 標準

    Visual C++ - Visual Studio 2010 の C++ と MFC での新機能の詳細
    zetamatta
    zetamatta 2014/12/08
    C++0xの6 つの主要言語機能として、ラムダ式、auto キーワード、rvalue references、static_assert、nullptr、および decltype を有効にしています
  • C++11 の Tuple で複数個の型をまとめて扱う - C++ プログラミング

    C++11 には、複数個の型をまとめて 1 つにする Tuple(タプル)が規定されました。 これまでは関数で複数の値を返す必要があったときに、引数に参照で取ったり、戻り値のために構造体やクラスを別途定義する必要がありました。ただ、この方法だと引数が IN なのか OUT なのかが判りにくかったり、たった数回使うために構造体を用意するのも手間でした。 新しい Tuple を使うと、必要なときに必要な数の変数をまとめて扱うことができるようになります。 ここではその Tuple の使い方について見て行きます。 Tuple の定義 Tuple は、次のように定義します。 このように std::tuple に続けて <> の中でそれが持つデータ型を必要な数だけカンマ区切りで指定します。 これが Tuple データ型になるので、最後に変数名を添えれば、Tuple 型の変数が定義できます。 Tuple

    zetamatta
    zetamatta 2014/12/08
    STL にもタプルがあったんだ。VC++ 2010 でも使えるYo!
  • std::mapでoperator[]が使えないとき - Qiita

    std::mapのoperator[]は、キーが存在しなかったときに新しくそのキーに対応する値を生成する。 そのためにstd::mapのoperator[]はconstメンバ関数ではなく、const指定されたstd::mapのオブジェクトではoperator[]を使って要素にアクセスできない。 void print(const std::map<int, char>& data, int i) { std::cout << data[i] << std::endl; // compile error }

    std::mapでoperator[]が使えないとき - Qiita
    zetamatta
    zetamatta 2014/06/10
    「std::mapのoperator[]は、キーが存在しなかったときに新しくそのキーに対応する値を生成する」―この辺がイケてないよねぇ
  • C++で静的配列の要素数を取得する - Qiita

    まぁ僕の好みはサイズ入りのクラスを作ることなんですが、 やんごとなき理由からレガシーなPOD配列使いたいこともあろうと思い、 ちょっとやってみた次第である。 コード template<typename TYPE, std::size_t N> std::size_t numof(const TYPE (&)[N]){ return N; } int test[16]; double test2[8]; float test3[4]; int test4; myClass test5[256]; std::cout << numof(test) << std::endl; //16 std::cout << numof(test2) << std::endl; //8 std::cout << numof(test3) << std::endl; //4 std::cout << numof

    C++で静的配列の要素数を取得する - Qiita
    zetamatta
    zetamatta 2014/05/31
    えぇッ!「#define numof(A) (sizeof(A)/sizeof((A)[0]))」じゃなくて、template を使うのかい!?
  • C++11 スマートポインタの話 - ここは匣

    C++にはガーベジコレクタが言語的には存在しないので、動的に確保したオブジェクトのメモリの管理はプログラマが責任を持って管理しなければ、メモリリーク・リソースリークなどの問題を生じてしまいます。 今時のプログラマはこうした問題を引き起こすリスクを減らす為に、記述ミスの起こりやすい生のポインタを使い自力でnewとdeleteを記述する事を避けて、安全なスマートポインタ、即ちオブジェクトの寿命により自動的にメモリ解放を行う便利なポインタを利用するべきです。 しかし、スマートポインタと言っても種類が幾つかあり、落とし穴も存在するのでどういった状況でどれを利用するのが良いのかを考察してみます。 Dynamic memory managementを見てみても C++11から随分増えていますね http://en.cppreference.com/w/cpp/memory std::auto_ptr

    C++11 スマートポインタの話 - ここは匣