202_c++に関するjpegGのブックマーク (47)

  • reveal.js

  • 高速なハッシュテーブルを設計する | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) はじめに 稿では、高速で汎用的なハッシュテーブルを作るために行う、設計についての多くの意思決定事項を紹介します。最終的に、私の emilib::HashSet とC++11の std::unordered_set の間のベンチマークが出来上がりました。もし、ハッシュテーブルに興味があって、自分で設計したいなら(どのプログラミング言語かに関わらず)、稿がヒントになるかもしれません。 ハッシュテーブル は、素晴らしい発明です。 ならし計算量O(1) ( O(√N)時間 )で、挿入、削除、検索を行うことができます。ならし計算量とは、ハッシュテーブルの計算に平均でO(1)の計算量がかかることを意味しますが、時々、これよりも多くの時間がかかる場合があります。具体的には、ハッシュテーブルに空きがない場合で、挿入の

    高速なハッシュテーブルを設計する | POSTD
  • OpenGLやDirectXなGUIにimguiが最強すぎる - Qiita

    imguiとは imguiは、OpenGLやDirectXなどの描画環境の中で動くGUIフレームワークです(vulkanも?)。 "Immediate Mode GUI"と呼ばれるパラダイムにより、大変短く直感的なコードでGUIを構築できます。 どういうGUIコンポーネントが使えるかは、リポジトリのスクショを見ていただいたほうが良いかと思います。 デバッグや調整、テスト用のGUIを構築することが目的のフレームワークです。 環境 今回この記事ではwindows10, vs2015, Cinder(0.9.0)上でサンプルを作成しました。 Cinder用には専用のimgui拡張があるため、そちらを使用します。 https://libcinder.org/ https://github.com/simongeilfus/Cinder-ImGui的な考え方や、imguiAPIは同じですが、

    OpenGLやDirectXなGUIにimguiが最強すぎる - Qiita
  • テンプレート観察メモ(Codeforces) - memo

    Codeforces上位50名のテンプレート、C++のみ、敬称略、まとめはこちら。 tourist #include <bits/stdc++.h> using namespace std; テンプレートなし TooSimple #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <string> #include <map> #include <set> #include <cassert> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_bac

    テンプレート観察メモ(Codeforces) - memo
  • Visual C++ for Linux Development with CMake - C++ Team Blog

    In Visual Studio 2017 15.4 you can now target Linux from your CMake projects. This enables you to work on your existing code base that uses CMake as your build solution without having to convert it to a VS project. If your code base is cross-platform you can target both Windows and Linux from within Visual Studio. This post will give an overview of the CMake support for Linux in Visual Studio. You

    Visual C++ for Linux Development with CMake - C++ Team Blog
  • C99からC++14を駆け抜けるC++講座 - Qiita

    C++初心者Advent Calendar 2015 この記事はC++初心者Advent Calendar 2015 17日目の記事です <<9日目 |Clang with Microsoft CodeGenがでたので試す <<16日目 | ブログズミ: Boost.Test v3 を使ってみた || 18日目 | それC++なら#defineじゃなくてもできるよ | とさいぬの隠し部屋 >> はじめに みなさま、ナマステ。さて、この記事のタイトルを見て、「時代・・・サトウキビ・・・忍者・・・うぅ、頭が」となった人は私と趣味が似ています・・・って話はどうでもいいか。 よく、「C++はBetter Cとしてはじめればいい」みたいな話を聞くのでそれにそって一気にC++14まで駆け抜けようと思います。 ちなみにC99を知らない人はお断りです。さようなら。 でははじめますか。 しっかし書き終わって

    C99からC++14を駆け抜けるC++講座 - Qiita
  • その6 CPPUnitを使ってテスト駆動型開発

    ホーム < ゲームつくろー! < デバッグ技術編 その6 CPPUnitを使ってテスト駆動型開発 前章からほぼ3年、気の長い話です(^-^;。 C++に限らず何かプログラムを作る時、特に意識しなければ、 1. つくりたい物(設計)を考える 2. クラス(機能)を作る → 一塊のモジュール 3. 動かしてみる(プロジェクトに加える) 4. うまく動かない時は修正 というプロセスを経てプログラムを大きくしていくと思います。しかし、この方法はそのうち変更に対する保守が難しくなってきます。それはクラスのメソッドを追加したり変更した時、その変更がどこでどう影響するかが分かりにくくなってしまうためです。 何か変更追加した後も、すでに実装されている箇所がちゃんと意図した結果を返してくれているか?それを判断する簡単な理屈は「何かテストする入力を与えてみて、その出力が予定通りかどうか判断する」です。以前は合

    その6 CPPUnitを使ってテスト駆動型開発
  • C++ 動的配列クラス std::vector 入門

    動的配列クラス std::vector とは std::vector とは C++ で標準に使用できるとっても便利な動的配列クラスでござるぞ。 通常配列と同じように [] 演算子で値を参照・代入することはもちろん、サイズ情報等の取得やデータの挿入削除なども可能だ。 「動的配列」とは配列サイズを自由に増減できるという意味。「可変長配列」と呼ばれることもある。 通常の配列は非常に便利で使用頻度の高いデータ構造だが、サイズを予め指定する必要があり、実行時に動的にサイズを変更することが出来ない。 例えば、「int data[100]; 」と宣言した場合、実行時にデータ数が100を超えるとお手上げだ。 スネークゲームでは、ヘビの胴体の長さがどんどん長くなるので、 胴体座標を動的配列で実装している。 これを普通の配列で実装すると、胴体の最大長を保持する可能性があるので、78*21=1638 のサイズの

    C++ 動的配列クラス std::vector 入門
  • C言語/C++ 処理時間計測 入門

    概要 プログラム開発当初から過度のパフォーマンス最適化を行うのは良くないと言われている。 プログラムソースの柔軟性が失われる可能性があるし、必要無いかもしれない最適化に時間を費やすのは開発工数管理的に好ましくないからだ。 プログラムがある程度動作するようになり、パフォーマンスが悪い(実行速度が遅すぎる)場合は、 処理時間計測を行い処理時間を要している箇所を探しだし、アルゴリズムやデータ構造の変更などのパフォーマンス・チューニングを行う必要がある。 予備調査として、色々なアルゴリズム・データ構造を採用した場合の処理時間計測を行い、 どれが最適か、どのような性質があるかを知ることも重要である。 稿では、上記のような目的のためにプログラムの処理時間を計測する方法について説明する。 場合によっては、ストップウォッチを片手にプログラムを実行し、処理時間を計測することもあるかもしれないが、 精度が1

  • その12 イテレート中のSTLのlistから要素を安全に削除する方法

    ホーム < ゲームつくろー! < Programming TIPs編 その12 イテレート中のSTLのlistから要素を安全に削除する方法 STLのコンテナは「イテレータ」によって要素を取り出します。この時良くあるのが「ある要素をチェックして、必要が無くなった場合はリストから削除する」という作業です。例えば描画オブジェクトのリストからもういらなくなったオブジェクトを除く時などこの作業が必要になります。 イテレート中のリストから要素を除く場合、ちょっと注意しないと思わぬバグが誘発します。この章ではイテレート中のリストから要素を除く方法をまとめます。まさにTIPsです(^-^;。 ① まともにやるとあっさりバグ 例として、int型のリストに0~9までの要素がこの順番で登録されているとしましょう。このリストをイテレートして「5」を取り除きたいとして、次のようなコードを書きました:

  • 静的ポリモーフィズムの安全で簡単な実装 -動的から静的にしてパフォーマンス向上- - Qiita

    #include<iostream> class Base{ public: virtual void print(){ std::cout << "Base" << std::endl; } virtual ~Base()=default; }; class Super : public Base{ public: void print() override{ std::cout << "Super" << std::endl; } }; int main(){ Base* array[2] = {new Base,new Super} ; array[0]->print(); array[1]->print(); delete array[0]; delete array[1]; return 0; } このプログラムを実行すると Base Super と出力されます。 Baseポイン

    静的ポリモーフィズムの安全で簡単な実装 -動的から静的にしてパフォーマンス向上- - Qiita
  • 処理時間の取得方法

    処理時間を計算するために使う関数はいくつかありますが、処理直前と直後の時間の 差分を計算するという点では基的に使い方は同じです。用途に応じて使い分けてください。 GetTickCount() Windows起動からの経過時間をミリ秒単位で返す。精度は数十ミリ秒程度。 timeGetTime() 関数を使用するためにはwinmm.libをリンクし mmsystem.hをインクルードする。 GetTickCountと同様にWindows起動からの経過時間をミリ秒単位で返す。 timeBeginPeriod,timeEndPeriodを使うことで精度の調整をすることができる。 デフォルトで5ミリ秒に設定されており、最高で1ミリ秒の精度指定が可能 QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) LARGE_INTEGER構造体

  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

  • 伝説のお茶の間

    このサイトのソフトおよびライブラリは 全てフリーです よかったら使ってやって下さい 当サイトはリンクフリーです。 last update 2010.02.13 更新履歴 伝説のお茶の間、略して「伝茶」です。 gmaruz@gmail.com G丸 001 テンプレートを使った汎用リストクラスを実現 します。 001-01 拡張リスト・ク ラス   テンプレートを使ってXLIST<クラス名> 変数名; でリスト・クラスが出来ます 001-02 拡張リスト・ク ラス(ポインタリスト編)   XLISTを拡張しポインタリストを作ります 001-03 拡張リスト・ク ラス(クイックリスト編)   高速push,popの可能なリストを作ります 001-まとめ 拡張リスト・クラス テンプレートを使った汎用リストクラスのまとめです 002 MIDI再生 002-01  MIDI 再生の基  MIDI再

  • constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ

    4. ◆自己紹介 • 公開しているライブラリ: Sprout C++ Library (constexpr ライブラリ) github.com/bolero-MURAKAMI/Sprout • 過去の発表資料: Boost.勉強会 #7 【中3⼥⼦でもわかる constexpr】 Boost.勉強会 #8 【中3⼥⼦が狂える当に気持ちのいい constexpr】 Boost.勉強会 #12 【constexpr 中3⼥⼦テクニック】 江添とボレロ村上の京都C++勉強会 【すごい constexpr たのしくレイトレ!】 www.slideshare.net/GenyaMurakami

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
  • サルでき.jp

    サルでき.jpは閉鎖しました。 今まで沢山の方々にお越しいただき当にありがとうございました。 新しいサイト「サルでき.com」はこちらです。 また皆様とお会い出来るのを楽しみにしております。 サルでき.jp管理人 カワサキタカシ

  • http://www.cppll.jp/cppreference/cppstring.html

  • C++11のすすめ

    この記事は Competitive Programming Advent Calendar Div2013 の 12 月 23 日の記事として書かれました. C++11 のすすめ C++03 は普段から使っているけども C++11 はまだ触ったことがない人向けの入門記事です.最近は多くのプログラミングコンテストで C++11 が使えるようになりつつあります.C++11 で大幅に C++ が書きやすくなっているので,ぜひこの記事を読んで C++11 を使い始めてください!この記事では C++11 に追加された多数の新機能のうちコンテストに役立ちそう(もしくは多くの人が使いそうな)機能を紹介します. 手元での実行の仕方 GCC もしくは clang を利用していれば -std=c++0x というオプションを追加すれば C++11 の機能が有効になります. $ g++ -std=c++0x -o

  • 関数テンプレートに対するデフォルトテンプレート引数の使い方 - 野良C++erの雑記帳

    この記事は、新しい使い道が発見され次第、随時更新していく予定です。 はじめに C++0x では、関数テンプレートに対し、デフォルトのテンプレート引数を渡すことが出来るようになりました: http://d.hatena.ne.jp/faith_and_brave/20071105/1194259443 // 上記 URL から転載 template <class T, class U = double> void f( T t = 0, U u = 0 ); void g() { f(1, 'c'); // f<int,char>(1,'c') f(1) // f<int,double>(1,0) f(); // error: T cannot be deduced f<int>(); // f<int,double>(0,0) f<int,char>(); // f<int,char>(0

    関数テンプレートに対するデフォルトテンプレート引数の使い方 - 野良C++erの雑記帳
  • C/C++ - 言語仕様編 第10回 〜テンプレート〜

    テンプレート関数 宣言 int f(int n); は、int 型変数 n を受け取り、int 型変数を返す。 C++ では、オーバーロードによって、この f(int n); 関数と、 double f(double v); C f(C c); などといった関数は区別されるが、もし、この3つの振る舞いが全く同じである場合、 すなわち、f(int n) や f(double n) で使用される演算子が、適切にオペレータ・オーバーロードされている 一般のクラス T に対しても動作させられるようにする場合、これを、 template<typename T> T f(T t); として代表させる事ができる。この f をテンプレート関数という。また、T をテンプレート引数という。 呼び出し テンプレート関数 f を使用する場合は、そのテンプレート引数 T に対して、型を指定し、 f<C>(t1);