タグ

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

  • C++ containers that save memory and time

    The latest news from Google on open source releases, major projects, events, and outreach programs for early career developers. We’re pleased to announce C++ B-Tree, a C++ template library that implements B-tree containers with an analogous interface to the standard STL map, set, multimap, and multiset containers. B-trees are well-known data structures for organizing secondary storage, because the

    C++ containers that save memory and time
  • Stackを使ってQueueを作る - くまメモ

    有名な話かと思ったら意外と知られていなかったのでメモ。 FILOを使ってFIFOを作るとも言います。StackでQueue作れてもQueueでStackを作る方法が思いつかないので誰か教えて下さい。もしくはこういう学問があったら紹介して頂けると嬉しいです。 簡単な説明としては、2つのStackを用意して、enqueueするときには1つ目にpush()し、dequeueするときには2つ目からpop()するだけ。 ただし2つ目のStackが空の場合は1つ目のスタックが空になるまで2つ目のスタックに移し替える。 template<typename T> class MyQueue { std::stack<T> in, out; MyQueue(){} void enqueue(const T& v) { in.push(v); } T dequeue() { if (out.empty())

    Stackを使ってQueueを作る - くまメモ
  • ゲームプログラミングにおけるC++の都市伝説 - ソフトウエア研究会in秋葉原 - PukiWiki

    ゲームプログラミングにおけるC++の都市伝説 † この記事は、C++ Advent Calendar 2012 22日目の記事です。 Prev 21日目の記事 CEANによる配列操作 Next 23日目の記事 構造化並列プログラミング 時間の関係で3つの都市伝説しかご紹介できませんでしたが、またの機会があれば他の都市伝説についてもお話したいと思います。 2012/12/22 written by h.godai @hgodai 目次 初めに 都市伝説1 C++は遅いのでゲームには向いていない 都市伝説2 boost::poolはゲームには向いていない 都市伝説3 boostライブラリは怪しいライブラリだ。使うと呪われる。 ↑ 初めに † かつて、8bit時代はゲームのプログラムはアセンブラが主流でした。やがて、ゲームのプラットフォームが16bitから32bitになるに従い、C言語でゲーム

  • C++ Advent Calendar 2012 「18日 : Cer に知って欲しい C++」 - krustf の雑記

    この記事は, C++ Advent Calendar 2012 (C++ Advent Calendar 2012 - PARTAKE) の18日目です. 温いネタをやりたいので C 言語を使っている人 (Cer) に C++ の知って欲しい/今すぐ使える機能を Tips 的に書いていこうと思います. 対象は特に設けなくていい気がしますが, 例えば数値計算クラスタとか. 普段 malloc とか for とかぶんぶんしてるような気がするので言い例かも. よく分からないところがあったらこの記事か Twitter の @krustf にでも質問してください. 後, 詳しい説明はしないほうが良いと思います. "C++ ってこんな風にかけるのか!" ぐらいの感想を持って頂いて, 使ってみようとする人が増えてくれればと思います. その点では途中よく分からない語が出てくるかもしれませんが「へー」ぐらい

    C++ Advent Calendar 2012 「18日 : Cer に知って欲しい C++」 - krustf の雑記
  • g++拡張 - kurimura’s diary

    g++のキモい拡張のひとつにa >? b というのがあります a > b ? a : b の省略形ですね。 代入もついでにやるa >?= bもあります。 gccでこれが出来ないのはかなーり(´・ω・`)ショボーンです。 fmax,fminを大量に使用する場合はg++のほうが短くなるかもしれませんね。 とりあえず例としてid:Ozy:20070125#p2でみかけたPKU1852をこれを使って解きましょう。 #import<algo.h> int n,a,b,l,v;main(){ for(cin>>n;cin>>l>>n;a=b=-printf("%d %d\n",b,a)) for(;n--;a>?=v>?l-v,b>?=v<?l-v) scanf("%d",&v); } 2重ループの中でcin使ったらTLEらった (´・ω・`) 頑張ったらTLEらわずに済むかも知れんけど、めどい

    g++拡張 - kurimura’s diary
  • プログラミングコンテストのためのSTL復習

    TopCoder SRMやGoogle Code Jamのような短時間勝負のプログラミングコンテストにC++で挑むのであれば,STLを使いこなせることは必須であると言えます。しかしながらSTLは普段使うことが少ないため,いざ使おうと思っても仕様の詳細を思い出すことができず,使えない(もしくは回りくどい別のコードを書く)ということがよくあります。 プログラムコンテストでよく使いそうな事項を調べなおしてみましたので,メモしておきたいと思います。 多次元配列 初歩的な事項ですが,多次元配列はvector<>をネストさせて定義できます。例えば,vector< vector<int> >のよう。 ▼初期化 多次元配列の初期化(初期サイズ設定)は次のコードで行えます。v[10][20]の配列となります。

    プログラミングコンテストのためのSTL復習
  • バイトをはじめることにした

    そろそろ費にすら事欠くようになったのでバイトをすることにした。一日数時間の掃除だ。おそらく、C++の執筆にはさほど影響しないだろう。 結局、結果からいえば、当初の目論見であった、貯金の続くうちに、全力でC++を完成させるというのは、無理だったわけだ。やれやれ、最初から働きつつ執筆すべきだったのか。 C++は、ようやくオーバーロード演算子まで進んだ。といっても、途中のBasic Conceptsに当たる部分は飛ばしたし、コピーとムーブも飛ばした。コピーとムーブはどう書けばわかりやすくなるのか分からない。純粋なコア言語機能だけ説明してもわかりにくいし、かといって、プログラミングテクニックまで説明するのは書の範疇ではないように思う。コア言語に絞ってさえこの分量なのだから、最初の壮大な野望通り、標準ライブラリまで手を広げようと思ったら、いつまでかかるか分からない。 そもそも、一冊のまとま

  • i++の評価タイミングがC++とC#では違う - tuedaの日記

    int p = 1; array[p++] = p; 上のコードは割とよく書くと思うがarray[1]に入る値は1だろうか2だろうか? 普通のプログラマーなら当然1だと考えるはず。 ところがC++ではそうなのだがC#では2が入る。 ++の評価するタイミングがはえーよ。 なぜ動作変えたし。 言語で動作が変わると思うと今後上記の書き方は封印せざるを得ない。

  • C++0x の std::pair - ろじかるんるんものがたり

  • 3番地コード - Wikipedia

    この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方) 出典検索?: "3番地コード" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL (2025年10月) 3アドレスコード(英語: Three-address code)とは、コンピュータ・プログラミング言語処理系などにおける中間表現などにおける形式の1パターンである。処理系においては、コンパイラ最適化などの処理を掛けるのに適している。2つの入力と1つの出力のアドレス(メモリまたはレジスタ)を指定する形式であるため、3アドレスコードと呼ばれる。命令セットアーキテクチャにおける「3オペランド」形式の類推とも言える。 この形式における各命令は、形式的に4ツ組で表

  • Clang - Wikipedia

    Clang ([ˈklæŋ]:クランのように発音[5]) は、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラフロントエンド英語版)である。OpenMPディレクティブ[6]や、OpenCL C/C++カーネル言語[7]も正式サポートしている。バックエンドにLLVMのコンパイラ基盤を使用しており、LLVM 2.6以降はLLVMのリリースサイクルに組み込まれている。 Clang/LLVMベースの派生プロジェクトとして、RenderScript(英語版)、CUDAのNVCC[8]、ROCm(英語版)のHIP-Clang[9]といった、Cライクなドメイン固有言語 (DSL) を組み込んだGPGPUフレームワークにおけるコンパイラフロントエンドとしても採用されている。 プロジェクトの目標は、GNUコンパイラコレクション (GCC) を置き換えるこ

    Clang - Wikipedia
  • オブジェクト指向できていますか?

    2010 icse-an analysis of the variability in forty preprocessor-based software...

    オブジェクト指向できていますか?
  • C++マニアック,C++言語,STL,sort,ソート,algorithm,アルゴリズム,使い方,pred,predicate,プレディケート,述語

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

  • いい加減、stringstreamを覚えようという話 - risuo's blog

    個人的に、プロコン用のコーディングではC言語系の入力が好きで、stream系は全く使っていなかったのだけど、ちょっと不便を感じることが多くなってきたので改心しようと思う。 例えば、次のような問題。具体的にはこういうの(http://www.deqnotes.net/acmicpc/p0017/ja)がある。 n個のデータセットがある。各データセットは改行で区切られている。各データセットは、半角スペースで区切られた整数を1行に並べた構成。並べられた整数の個数はデータセットごとに異なるかもしれない。このようなデータを読み込むにはどうすればよいか。 もしも各データセットごとに整数の個数が固定されていたら話は単純で、A[n_dataset][n_nums]みたいな配列を準備して各要素に対する入力をn_nums回やればいい。 でも、今回みたいに入力の個数が固定されない場合もある。こういう時、今までは

    いい加減、stringstreamを覚えようという話 - risuo's blog
  • stringstreamを使った入出力の処理 - 似非学問的な手記

    あんまよくわかんないからといって無視してきたstringstreamクラスが、調べてみるとこれがなかなか使えそうだったので覚書。 strstreamではなくstringstreamの方です。もっといえばヘッダじゃなくてヘッダで読み込む奴の方です。 いったいなんでこんなに警告吐かれんのとか思ってたら単なる見間違いとか……一体俺はなにやってんのかと...... ・文字列以外の変数を文字列にまとめる まあ普通の使い方?出力が決まった形でなければならないときとかに。日付とか。 int n; double d; char c; ostringstream os; os<<"int :"<<n<<endl<<"double :"<<d<<endl<<"char :"<<c<<endl; cout<<os.str(); ・C++にはないsplit()関数の代わり これがstringstream使えるねと

    stringstreamを使った入出力の処理 - 似非学問的な手記
  • 「UNIXをC++で分散OSに書き直せ」、幻に消えたBill Joyの野望とは - ITジャーナリスト星暁雄の"情報論"ノート

    UNIXの歴史にはある大きな転換点があり、そこには「もう一つの未来」の可能性が開けていました。この転換期に起こった出来事は「UNIX戦争」として知られていますが、その背景に「UNIXをC++で分散OSに書き直す」という野心的な計画があったことは、今ではほとんど語られることはありません。 私は、この一連の出来事の時期に、『日経エレクトロニクス』の記者としてUNIXの動向を追っていました。当時の出来事の概要を、取材者の視点から書き記しておきたいと思います。多くの読者にとって初耳の情報も含まれていると思います。 一連の出来事の発端は1987年に発表された、Sun、AT&T、Microsoftによる統合UNIXの発表です。この発表の前夜がどういう時代だったか、という話がまず必要でしょう。 統合前夜 1980年代後半は、コンピュータの歴史でも重要な時期でした。この時期、32ビット・マイクロプロセッサ

    「UNIXをC++で分散OSに書き直せ」、幻に消えたBill Joyの野望とは - ITジャーナリスト星暁雄の"情報論"ノート
  • C++: vector&lt;vector&lt;int&gt; &gt;などの入れ子のSTLコンテナをソートする

    vectorクラスやlistクラスなどの入れ子になったSTLコンテナ(vector<vector<int> >など)をソートするやり方。algorithmのsortで可能。ここでは、普通の昇順と降順、和、積、二乗の和の昇順についてソースを示す。基的には比較関数さえ用意すればどんなソートにでも対応できる。 #include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <functional> using namespace std; // 入れ子のコンテナの表示関数. void print_list(const vector<vector<int> >& v_list) { for (vector<vector<int> >::const_iterator p = v_list.

  • 競技プログラミングで陥りやすい言語仕様の罠 - 情報オリンピック 問題と解説

    筆者: qnighy 競技プログラミングでは手続き型言語として必要な最低限度の言語仕様さえ覚えておけば問題ないとされることが多い。 その一方で、ある種の特殊な言語仕様を知らないことによって特殊なバグに悩まされることも少なくない。 そこでここでは、そのような競技者の嵌りやすい罠を見つけ次第挙げていきたい。 CとC++の配列初期化の罠

  • numeric_limitsはデフォルトで意味無い値を提供する - ::Eldesh a b = LEFT a | RIGHT b

    C++のにある numeric_limitsテンプレート は, 実装依存のarithmetic typeに関する性質を提供します. テンプレートとは言っても, 実装依存の値を一般化して求めるなんて出来ないので, (というかそれを提供するのが目的) それぞれの型についての特殊化を定義してあります. 使ってみる. #include <iostream> #include <limits> using std::cout; using std::endl; #define PRINT(expr) cout << #expr << ": " << (expr) << "\n" int main () { PRINT(std::numeric_limits<int>::min()); PRINT(std::numeric_limits<int>::max()); PRINT(std::numeric

    numeric_limitsはデフォルトで意味無い値を提供する - ::Eldesh a b = LEFT a | RIGHT b
  • typedefされた型の取り得る値の取得方法(std::numeric_limits) - eagle_raptorの日記

    ちょっと前に作ってたソフトでtypedefされた型の取り得る最大値、最小値の取得方法がわからなくて困ったのでメモ 例えばint型が取り得る値の最大値、最小値が知りたい場合、C言語的に書くとINT_MAX,INT_MINを参照するのが普通なんだけど OpenGLで定義されてるようなGLuintとかtypedefされた型の取り得る値の範囲がほしい場合 GLuint_MAX,GLuint_MINのような便利な物が定義されていないので、 どうやって取り得る値の範囲を取得しようかという話 自分でヘッダーを見に行ってなんの型の別名としてtypedefされているかを確認して INT_MAXなどのマクロを使う方法もあるけれど、 これだとわざわざ環境に依存しないためにtypedefしてる意味が無くなってしまう。 ということで調べてみるとC++の標準ライブラリにnumeric_limitsなるものを発見 こん

    typedefされた型の取り得る値の取得方法(std::numeric_limits) - eagle_raptorの日記