タグ

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

  • 関連タグはありません

タグの絞り込みを解除

STLとProgrammingとdeferredに関するagwのブックマーク (31)

  • 右辺値参照・ムーブセマンティクス [N2118] - cpprefjp C++日本語リファレンス

    このページはC++11に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 ムーブセマンティクスはコピーコストの削減を主な目的としており、また所有権の移動を実現する。 右辺値参照はムーブ元のオブジェクト(右辺値)を束縛するための言語機能である。 右辺値(Rvalues)と左辺値(Lvalues)について 誤解を恐れずに言えば、右辺値とは名前をもたない一時的なオブジェクトである。 また、左辺値とは明示的に実態のある名前付きオブジェクトである。 struct Foo{} ; int f() { return 0 ; } int main() { int i = 0; i; // 名前付きオブジェクトは左辺値 0; // リテラル値は右辺値 Foo x ; x; // 名前付きオブジェクトは左辺値 Foo(); // コ

  • shared_ptrの使い方を知りたかったからいろいろ試してみた - uhiaha888’s diary

    タイトルのとおりです。 基的な使用方法 まず基的な使い方。 #include "stdafx.h" #include <memory> #include <iostream> class Hoge { public: Hoge(){} ~Hoge(){ std::cout << "Hogeのデストラクタだよ" << std::endl; } int number_; }; int _tmain(int argc, _TCHAR* argv[]) { { std::shared_ptr<Hoge> hoge1(new Hoge); // 初期化 hoge1->number_ = 30; { std::shared_ptr<Hoge> hoge2 = hoge1; std::cout << "hoge1->number_ : " << hoge1->number_ << std::endl

    shared_ptrの使い方を知りたかったからいろいろ試してみた - uhiaha888’s diary
  • C++11スマートポインタで避けるべき過ち Top10 | POSTD

    (注:2017/10/25、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) 私は新しいC++11のスマートポインタをとても気に入っています。自分でメモリを管理するのが嫌だと感じる多くの仲間たちにとって、これはいろいろな面で天の助けでした。私の場合、このおかげで新人にC++を教えるのがずっと楽になりました。 しかし、C++11のスマートポインタを幅広く使っていた2年ちょっとの間で、使い方を誤ると、プログラムの効率が落ちたりクラッシュして壊れたりするという事態に何度も遭遇しました。参照用に、以下に例を載せました。 まずはこれらの”過ち”を、簡単なAircraftクラスを例に取って見てみましょう。 class Aircraft { private: string m_model; public: int m_flyCount; weak_p

    C++11スマートポインタで避けるべき過ち Top10 | POSTD
  • シンプルな配列クラスを使って「右辺値参照」と「ムーブセマンティクス」を知る - Qiita

    C++11 の新しい機能に「右辺値参照」と「ムーブセマンティクス」があります。 ググればこれらに関して解説されてるサイトが結構ありますが、一般的には理解しづらいものとして扱われてるみたいです。 かくいう自分もよくわかりませんでした……。 ですので、今回は至ってシンプルな配列クラスを使って、これらが何を意味するのかを知ろうかと思います。 従来は「コピー」 まずは、「右辺値参照」と「ムーブセマンティクス」を使わないコードを見てみます。 # include <iostream> using namespace std; struct Array { typedef int ValueType; ValueType *p; int length; // コンストラクタ Array(int _length) : p(new ValueType[_length]) , length(_length)

    シンプルな配列クラスを使って「右辺値参照」と「ムーブセマンティクス」を知る - Qiita
  • n2930: Range-based for loopについて

    n2930: Range-Based For Loop Wording (Without Concepts) 今回、フランクフルト会議でconceptが廃止されたことにより、conceptに依存している機能は、すべてconceptに依存しないように変更しなければならなくなった。Range-based forは、conceptあってこその機能なのだ。concept mapがあるからこそ、既存の型にも、容易にRange-based forを適用できるようになるはずだったのだ。それが、conceptがない今、どうするのか。 答え:ADLを使う。 Range-based forは以下のような構文になっている。 for ( for-range-declaration : expression ) statement これは、コンパイラによって、以下のように変換される。 { auto && __ran

  • std::unordered_map のキーに独自の型を使用する - Qiita

    C++11 で追加された std::unordered_map は、連想配列を扱うことができる。 以前からある std::map では、キーとして扱えることができるのは 順序関係が定義されたオブジェクトのみである。一方、 std::unordered_map では順序関係が定義されていキーを使うことができ、純粋な連想配列(ハッシュテーブル)として使うことができる。 ただし、 std::unordered_map のキーはハッシュ値へ変換できる必要がある。多くの標準型のように std::hash() でハッシュ値への変換が定義されている型はそのままキーに使うことができるが、自分で定義した型など変換が定義されていない型をキーとして使用する場合はハッシュ計算を行う関数を自分で用意する必要がある。 このハッシュ関数を定義するには、 std::hash() を特殊化する方法と、関数オブジェクトを作成

    std::unordered_map のキーに独自の型を使用する - Qiita
  • やねうらおが本当に必要だったもの

    range-based forはコンピューター将棋で使えるのか? | やねうら王 公式サイト やねうらおが、range-based forが使えないとこぼしている。しかしその利用例をみるに、そもそもrange-based forを使うべきではない。 range-based forは、イテレーターというコンセプト(まだコンセプト機能はC++にないが)に従っている。イテレーターはポインター操作をモデルとしている。 イテレーターは要素群の中のある要素を指していて、operator *で要素を参照できる。 イテレーターの指す要素は、operator ++で次の要素に移動できる。 イテレーターはhalf-openとなっていて、要素群の最後の要素のひとつ次の、何も指していない状態のイテレーターが存在する。これを番兵のように使い要素の端に到達したことを判定する 一方、やねうらおのコードは、来イテレータ

  • C++ 多重集合 std::multiset 入門

    C++ std::multiset とは C++ の std::multiset とは順序付けされたデータを複数保持することができる順序付多重集合のコンテナクラスだぞ。 データを順不同に順序付多重集合に追加すると、その値をキーにし自動的にソートして内部に格納してくれるぞ。 つまり、要素が常にソートされた状態の配列のようなものだ。 内部的にはツリーを使用するので、ix 番目の要素を高速に取り出すことは出来ないけどね。 set とは違い、重複するデータを保持することができるぞ。これを「多重」と呼ぶ。 multiset はデータの追加・削除・検索の処理速度が O(log N) と高速だ。 vector に入っているデータを単純に検索すると処理速度は O(N) だが、あらかじめ O(N * log N) の時間をかけてデータをソートし、 lower_bound 等の二分探索を行うと O(log N

    C++ 多重集合 std::multiset 入門
  • [C++] STLの型の使い分け - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 先日Ohotech 特盛 #10で話した、「C++のSTLのコンテナ型を概観する」の内容を単独記事としてまとめたものです。 追記(2019.02.02) 記事から大幅加筆し動画講座化したものを公開しました。 C++ STLのコンテナ型を動作効率を考えて使いこなす! | Udemy 有料ですが、一部の節は無料で視聴可能です。 2月いっぱいまでは、上記のリンクから辿っていただけると有効のキャンペーン価格になります。なお、もしキャンペーン価格(¥3600→¥1200)が表示されていない場合はお問い合わせください(offkaiあっとまーくhh

    [C++] STLの型の使い分け - Qiita
  • std::setでデータ同士の間に順位付けができないと無視されてしまう件 - a_kawashiroのブログ

    #include <stdio.h> #include <set> using namespace std; struct Data{ int a,b; }; Data makeD(int aa,int bb){ Data d; d.a=aa,d.b=bb; return d; } bool operator < (const Data &d,const Data &e){ return d.a<e.a; } int main(){ set<Data> se; se.insert(makeD(0,1)); se.insert(makeD(0,2)); printf("se.size()==%d\n",se.size()); for(set<Data>::iterator it=se.begin();it!=se.end();it++) printf("a=%d b=%d\n",(*it).

    std::setでデータ同士の間に順位付けができないと無視されてしまう件 - a_kawashiroのブログ
  • C++14 のラムダ式 完全解説 前編 - 野良C++erの雑記帳

    C++14 の Committee Draft が公開された. C++14 は基的には C++11 のマイナーバージョンアップであるが,バグフィックスのみを行っている訳ではなく, C++11 の時点で微妙に使いにくかった機能,特にラムダ式については,大きな機能追加が行われている. そこで, blog では,このエントリから数回に分けて, C++14 のラムダ式について説明してみることにする. 拙い文章になるかとは思うが,読者の理解の助けになれば幸いである. なお,これらの記事を書くにあたって,読者に対して C++11 のラムダ式に対する知識を要求しないように心がけたが, もしかしたら,説明不十分であり,分かりにくい部分があるかもしれない. そのような場合には, の虫: lambda 完全解説 等, C++11 のラムダについて書かれた記事は多いので, それらの記事を読んでみることを

    C++14 のラムダ式 完全解説 前編 - 野良C++erの雑記帳
  • std::minmax_element - cppreference.com

  • std::string の正体(gcc-4.4.3)と細かい話 - やた@はてな日記

    # 環境依存な内容な上,無駄に細かい話なので,「そういうこともあるかもねー」くらいに流しちゃってください. (追記 2011-01-11)新しい規格では std::string の Copy on Write(CoW: 書き込み時に複製)が実質禁止になるとのことです.後,gcc 4.5 の時点で CoW はやめてしまうみたいですし,「そんな時代もあった」くらいに軽く流しちゃってください.id:gintenlabo さん,コメントありがとうございます. (追記の続き)個人的には,std::string の CoW 動作は挙動が分かりにくくなるので止める方に賛成です.でも,std::vector なんかを拡張するときはどうするのかな…?コピーしてしまうのか,swap() を使うようにするのか…. (さらに追記 2011-01-11)おおっと,ムーブコンストラクタにムーブ代入演算子なんてものが…

    std::string の正体(gcc-4.4.3)と細かい話 - やた@はてな日記
  • サービス終了のお知らせ

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

  • STL マスター・ノート

    より詳しい解説ノートです。 基的な コンテナ/反復子/関数オブジェクト/アルゴリズム に的を 絞って詳しく解説しています。 stack/queue/priority_queue/bitset/string/rope/valarray/complex については、 また後日、STLプロフェッサー・ノートの方で詳しく解説します。 初歩的な説明は全部とっぱらっていますが、 それでもやっぱり見にくいです。 それから、SGI社のSTLについてはcompose辺りの説明が若干違います。 〔STL-コンテナ〕 ■コンテナ共通の項目 全てのコンテナクラスは、デフォルトコンストラクタ、コピーコンストラクタ、デストラクタを提供する。 また、要素の範囲を指定して初期化を出来る。 ◆コンストラクタによる初期化のサンプル 1) コンテナの要素から初期化をする std::list<int> l ; <省略> std

  • Overloading *(iterator + n) and *(n + iterator) in a C++ iterator class?

  • イテレータ - Standard Template Library プログラミング

    イテレータ C/C++でのプログラミングで避けて通れないのが"ポインタ"です。ポインタは配列の要素を順にアクセスすることができます: // 配列の要素をプリントする。 void print_array(int* a, int N) { int* p = a; for ( int i = 0; i < N; ++i ) { cout << *p << ' '; ++p; } cout << endl; } int a[10]; print_array(a,10); 同様に、配列とは異なるデータ構造である単方向リストの内容をプリントするには、 struct slink_of_int { int data; slink_of_int* next; // 次のリンク(末端には0を設定) }; // リストの要素をプリントする void print_list(slink_of_int* p) { w

    agw
    agw 2011/09/10
    各種イテレータが要求するメソッドを掲載している。
  • 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とかが好きになるたった一つの方法 - 神様なんて信じない僕らのために
  • はてなブログ | 無料ブログを作成しよう

    東横インの朝バイキング、毎回スゲー並ぶ ビジネスホテルの東横インによく泊まる人にはおなじみであろうが、どのホテルに泊まっても宿泊客に対して朝バイキングの会場が小さすぎて毎朝ほぼどこの朝会場でも朝イチには長蛇の列が出来ている。 この朝を待つ長い列が耐えられない場合は東横インと決別するか…

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

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