タグ

c++11に関するkammy_rのブックマーク (18)

  • (C++0x)可変長テンプレート引数は再帰でおいしくいただきましょう | さかな前線

    C++0xで導入される可変長テンプレート引数,便利ですね. 僕は静的なのが大好きなので. 可変長テンプレート引数の何がおいしいかというと,例えば現在のboost::tupleはT0からT9までをデフォルトテンプレート引数と組み合わせて実装してるので要素数は10以下に限定されますが,C++0xに用意されるstd::tupleは可変長テンプレート引数で実装されるので,原理的には,無限の要素数が実現できます. ここで質的に重要なのは,「無限の要素数」に対応できることではなく,「任意の要素数nにおいて一般的に記述できる」ことである点に注意. また,可変長テンプレート引数を用いて,可変長引数の関数を書けます. これは,いわば「型安全printf」を書けることを意味します. 話がちょっと逸れましたが,じゃあその可変長テンプレート引数は実際どういう風に扱うの?という話を,関数テンプレートに関してします

  • C++11のstd::discrete_distributionでノンパラメトリックな分布の乱数生成 | さかな前線

    おさかなおさかなって言ってたらリアルにお魚好きになってしまったって話は前もしたと思うんですが,そのせいでホントに魚がべたい今日このごろです.調理法としては,お刺身の次点くらいで焼き魚と酒蒸しが好きです.お刺身はそのままスーパーで買ってくればいいし(美味しいかと言われると微妙ですが),焼き魚も買ってきてグリルで焼くだけなので気軽にできるんですが,酒蒸しはちょっと自宅ではできなくて卓が寂しいです. さて,C++11では乱数関連のライブラリについてもboost由来の大幅強化がされまして,ホントに強力なものになっています. まず乱数エンジンでは,よりよい擬似乱数アルゴリズムが豊富に取り揃えられており,さらにはハードウェアを利用した真の乱数も扱えます. また生成される乱数の分布の点でも,通常の一様分布や各種の確率分布(GaussianやPoissonなど)が利用できます. 今日お話するのは分布の

  • C++11の新機能のうち便利そうなものを自分用にメモる - Qiita

    Wikipediaを参考に。 テンプレートは滅多に使わないので、それ関係は無し。 おまけでDのコードを付ける。 ヌルポ ヌルポ用のキーワードが追加された。 NULLというマクロが嫌いなので0派なのだが、ちゃんとキーワードがあるなら使いたい。 0の場合はintとvoid*が区別できないという問題もあるようなので。

    C++11の新機能のうち便利そうなものを自分用にメモる - Qiita
  • 【C++】メンバ変数のstd::arrayの宣言時初期化で躓いた - milk_spoonのブログ

    STLちゃんと使ってますかー? 自分は結構std::array使います。 というか基、C言語の人が生配列使いたいなーって思うところが全部std::arrayに置き換わる感じです。 今日もこんな感じでテーブルをstd::arrayで作って、色々と計算に使ったりしました。 (もちろん、テーブルの大きさは例として小さくしてありますが…) #include<iostream> #include<array> int main() { //配列と同じ形の初期化が使える  //int table[3] = {1, 2, 3}; const std::array<int, 3> table = { 1, 2, 3 }; //便利なメンバ関数や、イテレータなどの利用が可能 for (int i = 0; i < table.size(); ++i) { std::cout << table[i] <<

    【C++】メンバ変数のstd::arrayの宣言時初期化で躓いた - milk_spoonのブログ
  • C++11: lockせずにデータ競合を防ぐ - Qiita

    #include <iostream> #include <thread> using namespace std; int value = 0; void increment(int n) { for (int i = 0; i < n; ++i) { value = value + 1; } } void decrement(int n) { for (int i = 0; i < n; ++i) { value = value - 1; } } int main() { const int N = 100000; thread th0(&increment, N); thread th1(&decrement, N); th0.join(); th1.join(); cout << value << endl; // はたして0か!? } #include <iostream> #i

    C++11: lockせずにデータ競合を防ぐ - Qiita
  • メイドでもよく分る右辺値参照 - TXT.TXT

    日2014年 2011年から早3年。C++11も浸透してきた、してきてる、してきて欲しいなという時分ですね 冬椿です。ファミレスに行ったらカレーがメニューから消えてました。こんばんは C++11で追加された機能の一つに『右辺値参照』というものがあります こいつは裏で、つまりライブラリ内の実装などで使われることは多くても 実際使ったことがあるという人は少ないのではないしょうか? 右辺値参照が必要になった経緯 例えばこのような関数があったとする List make_big_List() { List temp; for (size_t i = 0; i < 2011; ++i) temp.push_back(i); return temp; } 2011とはとても大きい数だ ゆえに、tempも非常に大きいことが予想される このコードはC++11以前であると tempの中身をコピーする→tem

    メイドでもよく分る右辺値参照 - TXT.TXT
  • C++11メモ @ 文字列から整数値への変換 - ラーメンは味噌汁

    2013-09-05 C++11メモ @ 文字列から整数値への変換 C++11 文字列から整数値へ簡単に変換 今まではstd::stringstreamを通して文字列から整数値に変換していましたが、std::stoiなどで簡単に変換できるようになりました。 // 旧 std::string str("10"); std::stringstream ss(str); int val; ss >> val; // 10 // 新 std::string strPlus("10"), strMinus("-10"); int valPlus = std::stoi(strPlus); // 10 int valMinus = std::stoi(strMinus); // -10 組み込みの整数型用の関数が全て用意してあります。 int stoi (const string& str, size

    C++11メモ @ 文字列から整数値への変換 - ラーメンは味噌汁
  • C++11スマートポインタ入門 - Qiita

    [2022-06-22] さすがに情報が古くなってきたため、最新の規格に合わせて記事の内容を再編集した記事を新たに書きました。よろしければ、こちらの新記事「C++20スマートポインタ入門」をご参照ください。 C++11では、unique_ptr<T> shared_ptr<T> weak_ptr<T>の3種のスマートポインタが新たに追加された。これらのスマートポインタは、いずれもメモリの動的確保の利用の際に生じる多くの危険性を低減する目的で使用されるが、それぞれ独自の考え方と機能を持っている。3種のスマートポインタを適切に使い分けることで、安全性と開発速度の向上が見込めるだけでなく、プログラマの意図に合わせて「ポインタ」を記述し分けることができる、非常に強力なツールとなる。 解説では、スマートポインタについて初めて学ぶ人を対象に、C++11で追加された3種のスマートポインタの機能と使い

    C++11スマートポインタ入門 - Qiita
  • for - C++入門

    概要 C++ では、繰り返し処理を行うときに、以下の制御文やテンプレートなどを使用します。 for C言語と同様のfor C++11で拡張されたfor (Range-based for) std::for_each BOOST_FOREACH boost で提供されます。 C++11で拡張された機能を利用する場合は、clang++ (3.3)や新しい g++ (gcc48)が必要です。 単純なfor文の例 ソースコード for.cpp #include <iostream> using namespace std; int main(int argc, char const* argv[]) { int a[] = {1,2,3}; for (unsigned int i = 0; i < (sizeof(a)/sizeof(int)) ; i++) { cout << a[i] << e

  • 今年気になった C++ ライブラリとかフレームワークを紹介する記事 - はやくプログラムになりたい

    この記事は C++ Advent Calendar 2014 の17日目の記事です.前日は @yutopp さんの Boost.Spirit.X3のご紹介 - C++ Advent Calendar 2014(16日目) でした. 最近 Boost.Spirit と LLVM で言語をちまちまと書いているので,Boost.Spirit と LLVM で言語つくるチュートリアルみたいなのを書こうと思ったのですが,チュートリアル用の言語の設計をあれこれ考えているうちに時間が経ってしまいました…ぼちぼち考えているので,別の機会に書きます. というわけで,今回は年の暮れということもあり,今年 GitHubC++ Trending repositories で見た,気になるライブラリやフレームワーク7つについて紹介しようと思います. 紹介するライブラリやフレームワーク cppformat :

    今年気になった C++ ライブラリとかフレームワークを紹介する記事 - はやくプログラムになりたい
  • C++11時代におけるクラスの書き方 - イグトランスの頭の中

    記事は、C++11 Advent Calendar 2011 : ATNDの2日目の記事です。 C++のclassは様々な使い方ができます。後発のほかの言語ではいくつもの概念に分かれているものも、C++ではすべてclassということもあります。 そこで、C++でclassを定義する際も、classと一括りにせず、自分がいったいどんなclassを書こうとしているのか明確に意識するとよいのではないだろうかと考えました。そのために、私なりのclassの分類をまとめ、この記事を書くことにしました。 これは、各々のプログラミング言語の経験により違いが出ることと思います。異論もあると思いますので、ご自身でも考えてみるとよいと思います。 以下、この記事では4種類に分類しています。 1つ目は「オブジェクト指向プログラミング (OOP) を実現するクラス」です(長いので以下OOPクラスと略します)。 vi

    C++11時代におけるクラスの書き方 - イグトランスの頭の中
  • C++0x ラムダ式 - Faith and Brave - C++で遊ぼう

    【2015年12月24日記載 : C++11 ラムダ式の正式なまとめは、こちらのページ「C++11 ラムダ式 - cpprefjp C++語リファレンス」を参照してください】 今まではラムダ式のリビジョンが上がるたびに差分だけ書いてたので C++0xに採択されたラムダ式の解説をあらためて書きます。 【C++03までの問題点】 C++03では、関数をその場で作成する、ということができなかったため 関数を受け取るSTLアルゴリズムを使用する場合、以下のように、アルゴリズムに渡す用の関数を作成しなければなりませんでした。 struct is_even { typedef bool result_type; bool operator()(int x) const { return x % 2 == 0; } }; vector<int> v; find_if(v.begin(), v.end

    C++0x ラムダ式 - Faith and Brave - C++で遊ぼう
  • 本の虫: lambda 完全解説

    目的 この記事は、C++0xのlambdaを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からlambdaを恐れることなく使う物のC++0xプログラマになれるだろう。 lambdaとは何ぞや lambdaである。あるものは、lambda関数、あるいは無名関数という名称を使っている。いったいlambdaとは何なのか。 lambdaは関数である。また、特に名前はない。したがって、lambda関数、無名関数と呼ぶのは、間違ってはいない。しかしここでは、単にlambdaと呼ぶことにする。 lambdaを定義しよう lambdaは関数オブジェクトである。lambdaは関数オブジェクトである。これはとても大事なので二度書いた。lambdaは関数オブジェクト以外の何物でもない。ところが不思議なことに、皆lambdaが単なる関数オブジェ

  • C++11メモ @ 共有したいリソースはstd::shared_ptr - ラーメンは味噌汁

    2013-09-01 C++11メモ @ 共有したいリソースはstd::shared_ptr C++11 std::shared_ptrとは リソースを共有できる 「確保したリソースを誰が開放するのか」という問題を参照カウンタという方式で解決したものです。 共有された場合に+1、共有解除された場合に-1としていき0になった段階で開放します。 使用するメモリ量や処理速度は生ポインタより若干劣る std::shared_ptrはその仕組み上、管理用のメモリとその増減を管理するための処理負荷が必要です。 std::unique_ptrの様にノーコストで使えるというわけではありません。とはいえstd::shared_ptrの速度が問題になることはあまり無いので気にせず使えるレベルです。 リファレンス std::shared_ptr - cppreference.com site/refer

  • lambdaでデータメンバーのキャプチャー

    まず始めに明言しておくと、lambda式でデータメンバーはキャプチャーできない。lambda式は、ローカル変数しかキャプチャできない。従って、このブログのタイトルは、すでに間違っている。ではなぜこんなタイトルなのか。それは。lambda式では、データメンバーを使うことが出来るからだ。これは、誤解されやすい。 struct C { int x ; void f() { [=]{ return x ; } ; } } ; これは、完璧にwell-formedなC++0xのコードである。ご覧のように、データメンバーが使える。「ほれ見ろ使えるじゃねぇか。するてぇと、データメンバーもキャプチャーできるに違ぇねぇ」と思われるかもしれない。しかし、データメンバーは、キャプチャーできない。 では、このlambda式は、何をキャプチャーしているのか。thisである。上の例は、以下のように書くこともできる。

  • C++14 のラムダ式 完全解説 中編 - 野良C++erの雑記帳

    この記事では,前編に引き続き, C++14 のラムダ式について説明していく. 前編では,ラムダ式に対する大雑把な説明と,ラムダ式の持つ型推論機能を紹介した. この記事では,ラムダ式の最も重要な機能の一つである,変数のキャプチャについて説明したい. なお,初めて この記事を読む方は,先に前編を読むことをお勧する. 目次(再掲): ラムダ式の基礎 (前編で解説) ラムダ式の型推論(前編で解説) 変数のキャプチャ(この記事で解説) ラムダ式の活用法(執筆中) マニア向けの補足(執筆中) 変数のキャプチャ ラムダ式により生成されるクラスの operator() の関数体は, this ポインタやメンバ変数・関数の扱いを除き,ラムダ式の体と同じコードになる. // 例えば, auto f = [] (int x, int y) { return x + y; } // 上のコードは, struc

    C++14 のラムダ式 完全解説 中編 - 野良C++erの雑記帳
  • Herb Sutter on Modern C++ Essentials

    Scaling Challenges: Productivity, Cost Efficiency, and Microservice Management The main objective of this article is to delve into the technical complexities and strategic adjustments undertaken by Trainline. By examining challenges such as managing peak transaction volumes and orchestrating microservice architectures, we aim to uncover the valuable lessons learned and insights gained from Trainli

    Herb Sutter on Modern C++ Essentials
  • C++11メモ @ enum classでスコープ付きenum - ラーメンは味噌汁

    2013-09-18 C++11メモ @ enum classでスコープ付きenum C++11 enum classとは enum classもしくはenum structでスコープ付きのenumを定義できるようになりました。 enum class Animals { Dog, Cat, }; // 型名::でアクセス Animals animal = Animals::Dog; 今までのenumはこのスコープが無かったので名前の衝突が発生することがあり、命名規則の統一や空の構造体や名前空間の中に入れるなど涙ぐましい努力が行われてきました。 enum Animals { Dog, Cat }; // どこかで同じ名前を使う可能性がある enum Pets { Rabbit, Dog // × Dogを再定義、コンパイルエラー }; // 先頭に型名を付けるなど命名規則の統一で回避 enu

    C++11メモ @ enum classでスコープ付きenum - ラーメンは味噌汁
  • 1