タグ

c++に関するuechocoのブックマーク (21)

  • C++ template の(部分)?特殊化ができるとき、できないとき

    C++ template の(部分)特殊化ができるとき、できないとき STL はまあ普通に使う、くらいの軟弱な知識で C++ を使っていると、クラス内で関数テンプレートの特殊化をしようとしてコンパイルエラーになって、なんでここで特殊化できないんだよ〜と愚痴を言っていたら、さらに恐ろしいことに、特殊化はできないのに部分特殊化はできる場合に遭遇したりして、 C++ の闇に触れた気分になるのだけど、実はそうでもないという話(少なくとも、ユーザの側から理解するだけなら、ね)。 (部分)特殊化できる条件 ややこしく感じる理由は、特殊化できる条件と、部分特殊化できる条件が全く別だから。実はそんなに複雑ではない。 特殊化できる OK: 名前空間スコープで定義 NG: クラススコープで定義 部分特殊化できる OK: クラステンプレート NG: 関数(⊃メンバ関数)テンプレート 例 template<cla

  • 高度に最適化された移植可能なメモリマネージャ

    2. 自己紹介 • ゲームプログラマやってます • 得意分野 C++,C#,GPU,javascript,PHP • 低レベル係とか描画関係とかCIとかwebと か • Steam、Origin、iPhone海外ゲームを遊ん でいます 3. はじめに • 元ネタはGame Engine Gems2の A Highly Optimized Portable Memory Managerです • Kindle Editionが$55.92で買えます

    高度に最適化された移植可能なメモリマネージャ
  • A Memory Allocator

    by Doug Lea [A German adaptation and translation of this article appears in unix/mail December, 1996. This article is now out of date, and doesn't reflect details of current version of malloc.] Introduction Memory allocators form interesting case studies in the engineering of infrastructure software. I started writing one in 1987, and have maintained and evolved it (with the help of many volunteer

  • Fabien Sanglard's Website

    This is my personal website, you can find here most of the code and ideas I came up with during my extra-professional time. 18/08/2024: Watching sunsets 09/08/2024: SNES: Sprites and backgrounds rendering 09/08/2024: How the SNES Graphics System works 29/07/2024: Designing the SNES Video System 21/04/2024: Inside the SNES cartridges 08/04/2024: Evolution of the SNES motherboard 01/04/2024: The hea

  • mapとunordered_mapのアイテム全走査の比較とmapの存在意義について考える - シリコンの谷のゾンビ

    過去の記事でvectorに比べてmapの全走査が遅いという比較を行ったことを思い出し,そういえばunordered_mapとの比較をしていなかったので比較をすることにした. 過去の記事 mapとvector&lt;pair&gt;を走査する速度の違い - 睡眠不足?! 前回のコードに以下のようなコードを追加して実験. 今回は以下のようなデータ構造を追加 (a) unordered_map (b) vector + map (c) vector + unordered_map (b)や(c)は,keyのデータを別途vector配列に入れておいて,そちらを走査しながらmapを引くというコードをよく書いているので,これやるとどんくらい遅くなるのだろうということを調べるため. 前回のコードとのdiffはこんな感じ. 6d5 < #include <unordered_map> 46,47d44 <

    mapとunordered_mapのアイテム全走査の比較とmapの存在意義について考える - シリコンの谷のゾンビ
    uechoco
    uechoco 2015/06/05
    map、unordered_map
  • [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
    uechoco
    uechoco 2015/06/03
    unordered_map、unordered_set、map、set、list、vector、deque、比較
  • C++11で覚醒した共用体の話

    はじめに KMC 2回生のhatsusatoです。コミケまでもう1週間もないんですね1。27日まで授業があるとか正気の沙汰じゃない。 この記事は KMC アドベントカレンダー 2013 の 23 日目の記事です。昨日の記事は DtYaZsK 君の C++11超入門 でした。 今日は昨日に引き続いてC++11に関するお話です。 C++11で覚醒した共用体の話 共用体はたいていのC言語の入門書に載っている(と思う)ので、C言語をひと通り勉強した人なら共用体を知っていると思います。共用体はC言語の持つ低レベルなメモリ操作能力の一翼を担っています。しかし、共用体を実際に利用することは非常に稀でしょう。 実はこの共用体が、C++11での仕様変更によって生まれ変わりました。今回はそんな共用体にスポットライトを当ててみます。 共用体の基 まず、C++11で共用体がどうなったのかを見る前に、これまでの共

    C++11で覚醒した共用体の話
    uechoco
    uechoco 2015/02/07
    union、共用体
  • 関数テンプレートの特殊化について - memologue

    関数テンプレートの特殊化いろいろ なんか日記を書くのを忘れていました。よくない。というわけで、最近おぼえたtipsを書きます。クラステンプレート内のテンプレートの特殊化(もどき)についての自分なりのまとめ。 まず、 namespace A { template<int V> static void YYY() { std::printf("default %d\n", V); } } int main() { YYY<0>(); YYY<128>(); } のような関数テンプレートがあるとき、これを特殊化*1した関数は namespace A { template<int V> static void YYY() { std::printf("default %d\n", V); } template<> static void YYY<128>() { std::printf("for

    関数テンプレートの特殊化について - memologue
    uechoco
    uechoco 2015/02/05
    メンバ関数テンプレート、特殊化、
  • [C++] ポインタを要素として持つコンテナのconst_iterator

    uechoco
    uechoco 2014/12/12
    const、const_iterator
  • C++マニアック,ヘッダファイルの作り方,How to make header file

    C++ のソースコードは、*.cpp ファイルとヘッダファイル *.h に記述されます。これらは、それぞれ、役割分担があるわけですが、C++ のコンパイルのメカニズム的には、ヘッダファイル *.h は、#include によって、*.cpp にインクルードされるということが決まっているだけで、その記述方法のポリシーについては、完全にプログラマーに任されています。このため、ヘッダファイルには、*.cpp に記述できるものは何でも記述できてしまうのですが、だからといって何を書いても良いというわけではなく、正しいポリシーに従って記述しないと、コンパイルエラーの山に悩まされるということになります。 そこで、C++ を正しく楽しむためには、ヘッダの記述方法について、そのポリシーを明確にしておくことは大いに意味があるでしょう。 ヘッダファイルの作り方は、ヘッダの中にテンプレート関連のコードを入れるかど

    uechoco
    uechoco 2014/12/05
    ヘッダファイル、static、extern、グローバル変数
  • STLのvectorから同一要素を削除 - minus9d's diary

    1つ目の方法は、sortして、uniqueして、eraseする方法。uniqueは、vectorの要素のうち、となり合う同じ要素をまとめて一つにする関数。しかしuniqueを使うだけでは末尾にゴミが残るので、そのゴミをeraseで削除する。覚えるのは少し大変。 #include <vector> #include <algorithm> #include <iostream> using namespace std; void printVector( vector<int> &vec ){ cout << "size = " << vec.size() << endl; for(int i = 0; i < (int)vec.size(); ++i){ cout << vec[i] << ", "; } cout << endl << endl; } int main(void){ //

    STLのvectorから同一要素を削除 - minus9d's diary
    uechoco
    uechoco 2014/11/27
    std::vector、std::unique、sortしてuniqueしてeraseするか、setしてvectorに戻すか
  • C++: value_type versus make_pair, which is faster for map insert?

    uechoco
    uechoco 2014/11/26
    std::map、value_type、make_pair
  • キャストを調べまわってわかった事をメモ - かせいさんとこ

    こうですか?分かりません!>< 従来のキャストは超危険 無条件で変換できちゃう そもそもどういった目的でキャストしているのか判らない 括弧で括るだけなので、grepで探しづらい 設計側としては非推奨 新しいcast 目的別にキャストを分ける どういった理由でキャストを行っているかわかりやすい 危険なキャストを発見しやすい 以下の4種類 dynamic_cast static_cast reinterpret_cast const_cast dynamic_cast 目的 安全な基底クラスから派生クラスへのキャスト(ダウンキャスト) キャスト対象 基底クラスから派生クラスへのキャスト(ダウンキャスト) 派生クラスから基底クラスへのキャスト(アップキャスト)も特に問題なくできるが、そちらはstatic_cast推奨 例外が発生しないから static_castの方が軽いから→dynamic_c

    キャストを調べまわってわかった事をメモ - かせいさんとこ
    uechoco
    uechoco 2014/10/31
    cast、dynamic_cast、static_cast
  • static_cast をいい加減な気持ちで適当に付けないと決めた日 - zakio.net

    最近、些細なことに気付く程度には余裕が出てきたのだろう。ふと自分のコードを見直してみると、static_cast を単なる「警告除け」や「コンパイルエラー除け」として、あやふやな理解のまま使っていることに気付いた。どうやら私は、static_cast をなんとなく「それ以外の cast」といったような感覚で使っているようだ。「それ」とはもちろん、標準で用意されている static_cast 以外の cast、dynamic_cast, const_cast, reinterpret_cast の3つのこと。これらの cast は役割が結構はっきりしているので、それぞれ、安全なダウンキャスト用、const 外し用、強制置き換え用として(もちろん必要に迫られて)迷うことなく使っている。ところが static_cast だけは、それ以外の状況で警告(あるいはコンパイルエラー)が出た時に仕方なく付

    uechoco
    uechoco 2014/10/31
    static_cast、ダウンキャスト、アップキャスト
  • C++初心者がC++を使って競技プログラミングするための備忘録のようなもの

    kyoupro_on_cpp.md C++初心者がC++を使って競技プログラミングするための備忘録のようなもの この記事は、C++ (fork) Advent Calendar 2013の12日目の記事です。 はじめに 記事を書く人が居ないみたいなので、C++初心者ですが箸休め的な記事を書こうと思い立ち、いざ書き上げてみたら思いの外長くなりました。 この記事は、C++初心者な著者が、C++を用いて競技プログラミングをするために、調べたことや試した事などのまとめです。 記事中に誤り、問題点やご指摘、ご質問等ありましたら、@rigibunまでご連絡下さい(特にpush_bach) githubmarkdownを使いたかったことと、変更履歴が見られることからgistで書きました。 免責事項 著者はこの記事を利用することによって生じたいかなる損害等に対して責任を負いません。 この記事は競技プログ

    C++初心者がC++を使って競技プログラミングするための備忘録のようなもの
  • std::stringstream再考 « Stop Making Sense

    August 2011 (1) July 2011 (1) June 2011 (2) April 2011 (2) March 2011 (2) February 2011 (2) January 2011 (6) December 2010 (6) November 2010 (5) October 2010 (8) September 2010 (2) August 2010 (3) July 2010 (9) June 2010 (4) March 2010 (1) February 2010 (7) January 2010 (2) std::stringstreamとは C++の標準ライブラリ(STL)で定義されている文字列ストリームで、色々な型を文字列化する際に重宝するクラスです。 JavaのStringBufferクラスに似ています。 まず、簡単な使い方から見てみましょう

    uechoco
    uechoco 2014/09/18
    std::stringstream、std::istringstream、std::ostringstream
  • Google C++スタイルガイド 日本語訳

    Text Drop 翻訳、プログラミング、写真、カメラなどについて書いてます。スタイルガイド/コーディング規約やチートシートなど、ちょっと便利なものを翻訳しています。 TEXTdropでは、C++プログラマーも利用できるパワフルな機能を搭載。C++のコードを書く際に行う手順や避けておきたい工程などを詳しく説明しています。コードスタイルラインの日語版では、日語訳やJ P Yへの換金もサポート。話題性があるオンラインカジノ 日円変換や入金の際のバグにも対応しています。統一性のあるコードを書くためのポイントや規約の種類を参考にする事ができます。

  • Doxygen 向け C/C++ ファイルのコメントテンプレート - l1o0の日記

    Doxygen 高機能なんだけど、高機能すぎてどうやって Doxygen 用のコメントを書けばいいのかよくわからん。コメントとルール作りも兼ねてテンプレートを作っておこう。 Doxygen のいいところはソースコードが可視化されることもあるけど、コメントを付けてないとソースコード解析時に「コメントが付いとらん」と警告してくれるところ。さぼってコメントを付けないのを防いでくれる。 Doxygen C/C++ テンプレート comment.c /**********************/ /* ファイルヘッダの例 */ /**********************/ /******************************************************************************/ /*! @addtogroup モジュール名_サブモジュール名

    Doxygen 向け C/C++ ファイルのコメントテンプレート - l1o0の日記
  • std::map - erase 時の iterator の無効化を防ぐ - yanaken@phper

    std::map を使用していると、 「ある条件を満たし(た|てない)要素を削除したい」 ってことがよくある。 そんな時はこんな感じにしてみる。 std::map<int, bool> hige; std::map<int, bool>::iterator it = hige.begin(); while (it != hige.end()) { if (it->second == true) { // ここがポイント hige.erase(it++); } else { ++it; } } [説明] std::map は要素を変更した場合に、以前まで保持していた iterator は無効になってしまう。 erase の戻り値も void なので何も期待できない。 だったら erase に渡す前の iterator を保持しちゃう。 std::map<int, bool>::iterato

    std::map - erase 時の iterator の無効化を防ぐ - yanaken@phper
    uechoco
    uechoco 2014/05/18
    std::map、erase
  • STLでイテレータのループを組むときの注意 - HongoWiki

    C++で、STLのコンテナを使っていて、イテレータを用いて各要素にアクセスするループを書くときがあります。 要素を削除するメソッド、たとえばerase()やremove()をループの中で使う場合は、ループの終端判定がずれてしまわないように注意が必要で、具体的には毎回、イテレータとend()の比較をあらわに行う必要があります。 たとえば、SpaceWire/RMAP Libraryで、RMAPのTransaction IDのデータベースをmapで実装しているとします。 以下のようなループの記述は、危険です。ループの終端判定が正しく行われず、結果として不正なメモリアクセスを行う可能性があります(普通のOSなら不正メモリアクセスでプログラムが終了する)。 map<unsigned int,unsigned int> tidmap; map.insert(...tidを追加する操作...) map

    uechoco
    uechoco 2014/05/18
    iterator、std::map、erase