タグ

ProgrammingとC++に関するagwのブックマーク (503)

  • How to initialize unsigned char pointer

  • C++11 の乱数ライブラリ <random> - Siv3D 開発ブログ

    C++11 では、新しい乱数ライブラリのヘッダ <random> が追加されました。 一様にランダムな整数を生成する「乱数生成エンジン」と、値を特定の方法で分布させる「分布生成器」が用意されています。 乱数生成エンジンは 線形合同法 メルセンヌ・ツイスター Lagged Fibonacci 法 ハードウェアエントロピーソース(時刻や CPU カウンター、I/O の状態など大量の低レベルシステム情報)を利用した非決定論的(予測不可能)な乱数生成 の 4 種類が実装されています。非決定論的な乱数生成以外の手法では、初期シードから擬似乱数列を生成します。 分布生成器は 一様分布 正規分布 ベルヌーイ分布 ポアソン分布 をはじめ多数のアルゴリズムが実装されています。 非決定論的な乱数生成エンジン std::random_device を使ってランダムな値を出力してみましょう。プログラムを実行するた

    C++11 の乱数ライブラリ <random> - Siv3D 開発ブログ
  • なぜ gcc はファイルの最後に改行がないと警告を出すのか? - Schi Heil と叫ぶために

    gcc が出す以下の警告。消すのは簡単で EOF に改行を一つ入れれば良い。でもこれ何が悪いのか分からなかった。 warning: no newline at end of file コンパイラが出す警告だから絶対に何か意味があるはず。調べてみると意外にもテキストファイルの定義にたどり着いた。 ということで POSIX 的に行は改行で終了していて、テキストファイルは行の集合だからファイル末尾には必ず改行が来ると。 Text File / Line - odz buffer Definitions - 3.392 Text File Definitions - 3.205 Line つまり POSIX はテキストファイルにもちゃんと定義を定めていて、最後に改行が無いファイルはその定義に違反するから警告を出す。 There is also some confusion as to whethe

    なぜ gcc はファイルの最後に改行がないと警告を出すのか? - Schi Heil と叫ぶために
  • Codeforces C++0x版テンプレ - simezi_tanの日記

    ソースコード #include<iostream> #include<sstream> #include<algorithm> #include<map> #include<set> #include<queue> #include<complex> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; #define rep(i,n) for(int i=0;i<(int)n;i++) #define all(c) (c).begin(),(c).end() #define pb emplace_back typedef long long ll; typedef vector<int> vi; typedef tuple<int,int> pi; const int inf=(int)1e9;

    Codeforces C++0x版テンプレ - simezi_tanの日記
  • C++11の時間ライブラリは美しさを追求したあまり、かえって使いにくくなっているのではないか

    C++11の時間関係のライブラリは、非常に美しい設計をしている。 まず、経過時間そのものを表すdurationがある。Cライブラリでいえば、time_tの値の単位を指定するクラスだ。Cライブラリでは、time_tの値は秒であったが、C++では、単位を指定できるのだ。 durationでは、単位ライブラリであるratioを使って、秒、ミリ秒、マイクロ秒などといった時間単位を表現している。 秒 std::chorno::seconds ミリ秒 std::chrono::milliseconds ナノ秒 std::chrono::nanoseconds 時 std::chrono::hours それ以外の、独自の刻みがほしいとしても、簡単に作成できる。 4分33秒 using four_minutes_thirty_three_seconds = std::chrono::duration< l

  • http://japan.internet.com/m/developer/20081209/26.html

  • 本の虫: 多くのプログラマは言語を表面的な理解だけで使っている

    一般のプログラマの多くは、プログラミング言語というものを、ごく浅い表面的な理解だけで使っている。これは、いわゆる「入門書」によるところが大きい。入門書は、言語をできるだけパターンで教えようとする。かくかくしかじかの場合には、とらとらうまうまのように書いておけばいい、などといった具合だ。 たとえば、配列の全要素や、aggregateの全メンバーをゼロで初期化したいとする。多くのC++プログラマは、以下のように書く事であろう。 int a[100] = {0} ; このコードは、正しく動く。配列aの要素は、すべてゼロで初期化される。しかし、C++という言語を考えた場合、{0}と書く必要はない。空の{}で十分なのである。 int a[100] = {} ; では何故、多くのC++プログラマは{0}と書くのか。それは、多くの参考書が、そのように書いているからに過ぎない。大多数のC++プログラマは、

  • Loading...

  • C++ 1xについて - はてなかよっ!

    C++ Advent Calendar jp 2010の24日目の記事です.世の中ではC++ 0xが旬のようですが,そんな古いのは置いておいてC++ 1xの話をしましょう.C++ 1xはついに破壊的変更が来ます. include to import includeは単なる置換でコンパイルが遅い原因にもなっていました.C++ 1xからはシンボルをインポートするだけのimportが追加され,またコンパイル処理の明確な分離によって,爆速コンパイルになっています. struct / classの最後の;の削除 struct S { // ... } // ;がいらない! これに苦しめられた人は結構いるのではないでしょうか! Angel Bracketの削除 C++ 0xで>>が出来るようになったとはいえ,やっぱりこの辺はコンパイラに優しくないわけです.なので,C++ 1xでは!()を使ってテンプレ

    C++ 1xについて - はてなかよっ!
  • ドワンゴのC++勉強会で発表した

    歌舞伎座.tech#2でC++14について発表した。 今回、ドワンゴ側から、交通費ぐらいは出すから、C++11かC++14について話してくれと言われた。正直、C++14が出てくるとは思わなかった。まさか、日の企業にそんな気概のあるところが残っていようとは期待していなかった。ともかく、C++14について話してくれと言われたので、C++14に新しく追加されるコア言語機能をすべて解説することにした。 当日使ったスライドは、GitHubにあげてある。 EzoeRyou/kabukiza-tech2-slide また、GitHub Pagesも有効にしてあるので、Web上で閲覧できる。 http://ezoeryou.github.io/kabukiza-tech2-slide/index.html 。 当日はそれなりに盛り上がったようだ。 私は普段酒は飲まないのだが、今日、たまたまビールがあるの

  • Super Technique 講座~マクロの技

    質的にC言語はトリッキーな言語ではない。だから、トリッキーな技は特定機能に集中する傾向があり、そのような機能とは「マクロ」と「ポインタ」である。 引数展開マクロの小技 DRY原理とプロトタイプ宣言 グローバル変数管理 関数ポインタ配列のプロトタイプ宣言と定義 引数展開マクロの小技 一般論としては、マクロは define 文によって即値定数を記号定数で定義しなおす、というのが真っ当な技であるが、これは今更触れるほどの内容はない。それでも次のようなテクニックはある。 #define swap(type,a,b) {type tmp=a;a=b;b=tmp;} int x = 10; int y = 20; swap( int, x, y ); これは引数展開マクロを使って、いわゆるSWAPを実現する簡単なマクロである。よく類書にこれは「次のように使うと問題がある」とされる。 if( z )

  • C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう

    C++0xになると、C++03でごちゃごちゃした部分がだいぶ すっきり書けるようになるので、C++0xでの入門はこんな感じになるよー、 という気持ちで書きました。 1. Hello World C++0xでの入出力には、IOStreamというものを使用します。 <<演算子でどんどんつないでいきます。 以下のプログラムの読み方は 「標準出力(cout)に"Hello World"という文字列と、改行(endl)を出力する」 です。 #include <iostream> int main() { std::cout << "Hello World" << std::endl; return 0; } Hello World coutとendlを使用するには、 #include <iostream> のように、という標準ライブラリのファイルを読み込む必要があります。 2. コメント 行コメント

    C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう
  • 文字配列char str[x]の初期化

    C言語では (P2)のような間違い?をしてもコンパイルエラーにならないことに注意しよう. (P2)は10文字分の配列しか用意していないところに10文字の初期値をしていしているので,末尾のNUL文字を格納するスペースがたりていない. このような場合,配列str2の中身は{ 0x31, 0x32, ..., 0x39, 0x30 } になって終端がNUL文字にならなくなる. なので,printf("%s\n", str2);とすると, 1234567890^E)x※wk△bl%@@-$^x&…みたいなメチャクチャ ハチャメチャな文字列が表示されることになる. この動作は char str[10] = "123456789";のような書き方が単なるシンタックス シュガーであり 実はchar str[10] = { 0x31, 0x32, ..., 0x39, 0x00 };と展開されるのだという

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • gccとclangのC++0xサポートの比較

    C++0xの規格はほぼ固まり、もはや変更されることはない。恐らく、このまま規格制定されるものと思われる。さて、今C++の主要なコンパイラーを上げるとすると、gccとclangをおいて他にはない。MSVCはオモチャだ。右の両コンパイラーは、C++0xの新機能を実装し始めている。もちろん、まだ不完全な実装も多いが、とりあえず遊べる程度には実装できている機能も多いので、比較してみることにする。 gccのC++0xサポート状況は、以下のページに簡易な一覧がある。 C++0x Support in GCC - GNU Project - Free Software Foundation (FSF) clangのC++サポート状況は、以下のページに簡易な一覧がある。 Clang - C++ and C++'0x Status 面白いことに、どちらか片方のコンパイラーでしか実装されていない機能が、結構あ

  • 本の虫: 記録からみるLinus TorvalsのC++観

    On Wed, 5 Sep 2007, Dmitry Kakurin wrote: > > Gitのソースコードを始めてみた時、2つのことが頭にひっかかった。 > 1. C++じゃなくて純粋なC。理由は不明。移植性とか言わないでよ。 > クソだ。 クソまみれなのはオメーの方だ。 C++は悲惨な言語だ。しかも、少なからぬ数のプログラマーが使っていて、完全無欠のどうしようもないクソを生成するのがめちゃめちゃ簡単になっているという点で、よけいに悲惨だ。マジで、Cを選択する理由が「何もなかった」としてもだ、C++プログラマー避けになるというだけで、Cを使う大義名分になる。 つまりだ:Cの選択は唯一のまともな選択なんだよ。Miles Baderがふざけて、「いやがらせによる追い返し目的」なんていってたが、実際のところ正しい。俺の出した結論では、プロジェクトにCよりC++を使いたがるプログラマーは、む

  • Range-Based For Loops in C++11 - Cprogramming.com

  • 猫でも杓子でもわかる Functor in C++0x - ろじかるんるんものがたり

    関手というのがどうもよくわからず。 ということなので、釣り記事を書こうと思います。 Haskell とか使ってる人って、これぐらい全部わかってるイメージがありますし、矢張り釣り針は大きいほうがいいので、C++ で説明してみようと思います。C++ の関数型表記だとちょっとイマイチなので C++0x を使います。 ガンガン嘘をつくので突っ込んでください。 関手というのは、めちゃくちゃ簡単にいうと「圏をとり圏を返す関数」です。あっ、みなさんが大好きな圏がしょっぱなから出てきましたね!モナドなう〜。 でも圏、カテゴリってなんだろう? 圏というのは、一言でいうと「対象とその射からなる構造」です*1。 対象、射って何だろう?ということなんですけど… 突然ですが bool ってご存知ですか?勿論そりゃご存知でしょうけれども、少し説明してみます。 C++ には bool という型があって、この型の値として

    猫でも杓子でもわかる Functor in C++0x - ろじかるんるんものがたり
  • VC++11 Betaでrange-based for-loopを使ってみる - そらいろ日記

    Visual C++11のC++11サポート状況を見てみると、 UPDATE - March 2, 2012: the range-based for-loop and override/final v1.0 have been implemented in VC11 Beta. VC11 Betaでrange baseなfor loop、つまりいわゆるforeachとoverride/finalのv1.0に対応しましたよって書いてあるね。 今回は前者のrange-based for-loopについて。 Developer Previewがrange-based for-loopに対応してないから、 BOOST_FOREACHとC++/CLIのfor each、std::foreachに速度差があるなら、 マクロ使って環境に応じて切り分けるみたいな感じだよねー。 速度比較取ったけど速度に差

    VC++11 Betaでrange-based for-loopを使ってみる - そらいろ日記
  • C++0x - Range-base for文 - Faith and Brave - C++で遊ぼう

    コンテナや配列をループするための新たなfor文が追加されます。 いわゆるforeach文です。 今まで vector<int> v; for (vector<int>::iterator it = v.begin(), last = v.end(); it !=last; ++it) { cout << *it << endl; } これから vector<int> v; for (int value : v) { cout << value << endl; } 参照可 vector<int> v; for (int& value : v) { ++value; } 現在のC++でも、VC++8.0(VS2005)のfor eachや Boost C++ LibrariesのBOOST_FOREACHで同じように簡潔に書ける C++0x言語拡張まとめ

    C++0x - Range-base for文 - Faith and Brave - C++で遊ぼう