タグ

c++に関するlike_futsalのブックマーク (41)

  • C++完全理解ガイド Rev1.4.01 - Qiita

    はじめに C++を完全理解したので完全理解ガイドを書く。 最初に言っておくがタイトルは詐欺で、実際はポエムである。 僕は仕事C++を書いたことはないのでなんか変なことを言っているかも知れない。 ところで無職になったので、普通にC++で職がほしい。 2018年6月から受託で仕事をもらい、毎日C++17を書いています。 2018年9月から雇用され、毎日C++17を書いています。 かなり雑に書いているはずなので、コメント等でどんどんマサカリを投げてほしい。 僕は何者か 工学部を卒業して4年ほど高校の理科教師をやっていたが、現在無職になった人。 工学部を卒業して4年ほど高校の理科教師をやっていた。 最初は良かったのですが、授業に慣れ、このまま自分の成長が止まってしまうのかとなぁと思い、辞めて無職に。 一ヶ月無職を楽しんだあと、某から受託でC++を書く仕事をもらい、C++17を書いている。 主にツ

    C++完全理解ガイド Rev1.4.01 - Qiita
  • C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人

    追記(2015/04/19): 後置を使うべきという意見もあるようです -> 前置インクリメント vs 後置インクリメント | 闇夜のC++ C++を勉強し始めるまでは特に必要がない限り、値をインクリメントする際は前置ではなく、後置でやっているのを見かけるのが多かったのですが、C++や解説サイトを見ると、インクリメントが後置ではなく、前置になっているのをよく見かけます。 昨日まで単にC++のスタイル的な問題なんだろうと思っていたのですが、どうやらもっとちゃんとした理由があるようです。 某IRCで話を振ったら、友達が教えてくれました。 前置インクリメントと後置インクリメント まず、インクリメントを使った例としてfor文によるループを考えてみます。 C言語で書くと例えば以下のようになります。 for (i=0;i<n;i++) { ... } C++でも同じように書けます。 for (i=

    C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人
  • FFmpegのAPIを使う~ビルド環境構築 - Qiita

    はじめに FFmpegを使ってマルチメディアプログラミングをする方法を記載します。 OSはWindowsを使います。 FFmpegとは from Wikipedia FFmpeg is a free software project that produces libraries and programs for handling multimedia data. from Official site A complete, cross-platform solution to record, convert and stream audio and video. 上記から特徴は以下であることが分かります。 multimediaを扱う。audio/video record, convert, streaming free software cross-platform FFmpegは次のラ

    FFmpegのAPIを使う~ビルド環境構築 - Qiita
  • C/C++のlibcurl利用サンプル - Qiita

    以前試したコードを無くさないうちにメモ。 C/C++でlibcurlを使ってwww.google.comからGETするサンプルです。 FreeBSD 9.1でclang/clang++を使って試してみました。 まずはC。 #include <stdio.h> #include <string.h> #include <curl/curl.h> #define MAX_BUF 65535 static char wr_buf[MAX_BUF]; static int wr_index = 0; size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) { int segsize = size * nmemb; if ((wr_index + segsize) > MAX_BUF) { *(int *)use

    C/C++のlibcurl利用サンプル - Qiita
  • restrictキーワード - yohhoyの日記

    C99で追加された restrict キーワードについてのメモ。 コンパイラに対して「aliasが存在しないと仮定した最適化を許す」と伝えるためのキーワード。C99以降でのみ有効なキーワードであり、C++11現在でもC++には同キーワードが存在しない。(ただしコンパイラの独自拡張として、C++言語でもrestirctキーワードを使えるケースはある。) 要約: 構文的にはconstやvolatileキーワードと同列で、ポインタ型に対してのみ型修飾を行える。int * restrictなど。restrict intやint restrict *はill-formed*1。 コンパイラでの最適化を助けるためのもの。restrictキーワードを削除してもプログラムの意味は変化しない。 用法と意味 restrictキーワードの用法は、C標準ライブラリmemcpy関数/memmove関数における動作仕

    restrictキーワード - yohhoyの日記
  • [C++/分岐の処理]手続き型からジェネリックな設計まで - Qiita

    はじめに 例えばシューティングゲームを作る場合、敵を何十種類か実装して、それぞれ別の動きをさせたいでわけです。 しかしながらc++では(他の言語でも)そういう機能の実現方法がたくさんあり、最高の設計をするのは至難です。 この記事では敵の種類毎に別の動きをさせる方法について色々説明します。 それによって、どういう仕様の場合どうやって処理を分岐させるのが良いか考える助けになるかと思います。 サンプルを動くように実装するのは手間なので、そういう風にはしてません。 ※マークダウンでは表示が狂いますが、識別子に日語を使うのはg++以外では特に問題無いです。 switchによる処理の分岐 プログラミングを始めたばかりの人はまずこんな感じにすると思われる。 あるいはif文でも似たような事したり。 enum class EnemyType { スライム, ゴブリン, ドラゴン }; class Enem

    [C++/分岐の処理]手続き型からジェネリックな設計まで - Qiita
  • [C++]ゲームのオブジェクト管理システムが遅い場合 - Qiita

    この記事の続き http://qiita.com/mrdagon/items/c49f23b426aa96694aa2 はじめに ゲームのオブジェクト管理を同じ型を静的配列に入れて処理をswitch文で分岐する方式で実装してたのから、仮想関数でポリモーフィズムする感じの設計にして配列をstd::vectorにしてstd::shared_ptr使うようにしたら遅くなって処理落ちしだした、どうしよ?みたいな人向けの記事。 具体的に言うと、下の方が書かれた記事の例で言う1.から3.にしたら遅くなったので、めんどくさいけど4.をしたい人向けです、先に読んでおくとこの記事を読みやすくなると思います。 ゲームのオブジェクト管理システムについて考える また今回の内容は同人2Dゲームを作る等のメモリが何に使うのか分からない程余っている状況を想定しています、メモリがカツカツの場合は話が変わってくると思います

    [C++]ゲームのオブジェクト管理システムが遅い場合 - Qiita
  • [C++] STLの型の使い分け - Qiita

    先日Ohotech 特盛 #10で話した、「C++のSTLのコンテナ型を概観する」の内容を単独記事としてまとめたものです。 追記(2019.02.02) 記事から大幅加筆し動画講座化したものを公開しました。 C++ STLのコンテナ型を動作効率を考えて使いこなす! | Udemy 有料ですが、一部の節は無料で視聴可能です。 2月いっぱいまでは、上記のリンクから辿っていただけると有効のキャンペーン価格になります。なお、もしキャンペーン価格(¥3600→¥1200)が表示されていない場合はお問い合わせください(offkaiあっとまーくhhiro.net)。 追記(2014.10.22) 10月18日の札幌C++勉強会にて、この記事のダイジェスト版を発表しました。 なぜこの記事のような考え方が必要なのか、という紹介です。 STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7

    [C++] STLの型の使い分け - Qiita
  • C++で大規模な配列追記のパフォーマンス - ponkotuyの日記

    はじめに @__boronium による 「じゃあC++はどうなの?」 という疑問にお答えするコーナー。元のPython版はhttp://d.hatena.ne.jp/ponkotuy/20111216/1324021461 でどうぞ。 ちなみにg++4.6.1 -O2 -std=c++0xでコンパイル。 はじめる前に補足 微妙に間違った参考のされ方してたので補足しておくと、こいつはどういう訳か「データの入力が圧倒的に多いのにその殆どは参照すらされずに捨てられる場合」に一番早いコンテナ、という極めて稀なパターンに特化した測定なので、そゆ場合にしかアテになりません。 Vector #include <vector> int main() { const int size = 10000000; std::vector<int> v = {1,2,3}; for(int i=0; i<size

    C++で大規模な配列追記のパフォーマンス - ponkotuyの日記
  • 組み込みシステム上でのC++ | POSTD

    去年の10月、私が所属している 会社 の部署で、組み込みファームウェアの開発をC言語からC++に切り替えました。C++のクラス、リソースの自動クリーンアップ、パラメータ多相、そして強化された型安全性などは、汎用OSをデスクトップ機で稼働している時と同様、リアルタイムOS(RTOS)やベアメタル上でも便利です。C++を使えば、安全で表現豊かなファームウェアを書くことができます。 しかしC++のこの自動的な魔法は諸刃の剣とも言えます。いくつかの機能は、組み込み環境 ^(1) には搭載したくないシステムのファシリティに依存するからです。ツールチェーン周りをどうするかも厄介です。 memcpy やアトミック操作、ハードウェア固有の浮動小数点関数などの重要なファシリティが提供されるので、 libgcc と libstdc++ を完全に破棄するのではなく、特定の部分を避けて使わなくてはなりません。 こ

    組み込みシステム上でのC++ | POSTD
  • KAB-studio

    JavaA2ZJavaについてのあらゆる用語を網羅したプログラミング辞書です。全予約語、全演算子、使用頻度の高いAPIを含む1000以上の単語を掲載しています。しかも、全ての用語にそのままコンパイル・実行できる使用例が掲載されているので、実際に動かして試すことができます。 Javaのオブジェクト指向入門Javaを使用した、オブジェクト指向プログラミングの入門書です。クラスやインスタンスといった基的な部分から、継承やポリモーフィズム、インタフェースといった分かりづらい部分まで、図を使って分かりやすく説明しています。 CodianVisual C++ 6.0を使用したC++プログラミングについての解説集です。ポインタ、STL、DLL、システムフック、シェルエクステンションなど、他にはない希少な情報を丁寧かつわかりやすく説明しています。

  • グローバルフックを使ってみた - Gobble up pudding

    グローバルフック(またはシステムフック)を使ってWindows APIで遊んでみました。 フックというのは 引用元: wikipedia 主に元のプログラムに対する機能追加・拡張やカスタマイズの手段として使われるほか、デバッグのための情報収集にも有効である。このような有用な使い方の反面、既存のプログラムの動作を変更できることから、悪意を持ったプログラムによって利用される場合もある。例えばOSのキー入力処理のフックを使えばキーロガーを実装できることになる。 というものです。 メッセージを横取りして処理してしまうってやつです。 格的なキーロガーだとおそらく横取りした後に気付かれないように ちゃんとまたメッセージを送りなおすんでしょうけど… ということで、キーボード入力をOS全体でフックしてみました。 これを行うにはDLL化しなくてはなりません(しなくてもいい方法はあるにはある)。 ちなみにこ

    グローバルフックを使ってみた - Gobble up pudding
  • Windowsに土足で乱入?! 〜 フック関数の使い方 : DSAS開発者の部屋

    今日の多くの OS がそうであるように、Windows にも自作のプログラムコードを特定のプロセスへ介入させることのできる「フック」という仕組みがあります。自分自身のプロセスをフックすることもできますが、他のプロセスをフックすることで通常のアプリケーションプログラミングの枠を超えた様々な興味深い処理の実現が可能となります。 ・所定のプロセスに対する Windows メッセージの監視・捕捉 ・所定のプロセスでの特定のイベントに呼応する自作コードの注入 ・既存のアプリケーションの所作を変更 etc. 「自作のコードをあるプロセスに介入させる」とはどういうことでしょう? メモリ上のモジュールイメージにアクセスしてマシン語命令を書き換えて・・という怪しげな方法もありそうですが、Windows では DLL を利用することで比較的容易にこの命題を解決できます。 このことを逆に考えると、自作の DLL

    Windowsに土足で乱入?! 〜 フック関数の使い方 : DSAS開発者の部屋
  • DLL から「正しい」LIB ファイルを作るには

    となっていますから、これを使って sha1 が計算できそうです。 そこで、ntdll.dll とリンクするような LIB ファイルが欲しいわけです。 しかし Bing 先生に訊いてみると、わらわらと不正な方法が出てきます。 というわけでここに正しい方法をメモしておきます。 結論 まず、いろいろ試してみた結果最も楽な方法を述べます。 (以下 Visual Studio 2012 を使うことが前提) 1. akkarin.cpp を用意する extern "C" { void __stdcall A_SHAFinal (int, int){} void __stdcall A_SHAInit (int, int){} void __stdcall A_SHAUpdate(int, int, int){} } // extern "C" このソースは、LIB を生成するためだけのものです。 必要

  • DLLを使おう!!

    DLLプログラミングは、ウィンドウズプログラミングと切っても切れない関係……のはずなのに、結構わかりにくいんですよね。そういう部分をまとめてみました。 「DLL」。この名称は「Dynamic Link Library」の略です。日語に訳すと「動的にリンクするライブラリ」といったところでしょうか<一語しか訳してないやん。 通常アプリケーションを作製する場合、「各ファイルをコンパイルする」-「作製されたオブジェクトファイルをリンクする」という手順(いわゆる「ビルド」と呼ばれるもの)を踏んで「実行ファイル(Exeファイル)」が作製されます。 アプリケーションはいっぺんにすべてが作られるわけではなく、ソースファイル単位でまず「コンパイラ」が「オブジェクトファイル」というものを作り、次に「リンカ」が各オブジェクトファイルをくっつけ、「実行ファイル」にします。 この「ビルド時にリンクする」ことを「静

  • c++とアセンブリ言語で画像を反転させてみる - Qiita

    この記事は自分用の備忘録です。解説用ではないです 追記2: 結果だけ先に発表すると、OpenCVが約16ms、C++ with asmが約3msまで高速化されました。最後のコメント欄まで読んでいただければと思います。 きっかけ カメラから画像を取得して、それを反転させて表示するプログラムを開発しています。 画像の反転をOpenCVを使っているのですが、画素数が大きいのでもう少しなんとか早くならないものかと、取り組んでみました。 残念ながら、私が使っているデバイスのCPUは、OpenCLをサポートしていない、ので、GPUにデータを乗っける方法が使えないのです。 使えたら、OpenCV3で、高速化してしまうんですけどね。 ということで、イバラの道としりながら、アセンブリ言語に進んでいきます。 NEON命令 NEON命令とは、arm系CPUにおいて、1命令で複数データをまとめて処理できる命令だそ

    c++とアセンブリ言語で画像を反転させてみる - Qiita
  • 大学院生のためのLLVM | POSTD

    (注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな

  • C/C++中規模プロジェクトのための超シンプルなMakefile | POSTD

    私は多くの小規模プロジェクトで Make を使ってきましたが、より大きな規模のプロジェクトになると、それは非常にうんざりするようなものでした。最近までは、自分のビルドシステムに行いたいことが4つあったのですが、Makeでの方法が分かりませんでした。 out-of-sourceビルド(オブジェクトファイルが、ソースとは分離されたディレクトリにダンプ出力されます) 自動生成される(かつ正確!)ヘッダの依存関係 オブジェクト/ソースファイルのリストの自動的な決定 インクルードディレクトリのフラグの自動生成 以下にこれらの全てを行える、C、C++、およびアセンブリで動作するシンプルなMakefileを紹介します。 MAKEFILE TARGET_EXEC ?= a.out BUILD_DIR ?= ./build SRC_DIRS ?= ./src SRCS := $(shell find $(S

    C/C++中規模プロジェクトのための超シンプルなMakefile | POSTD
  • ソートアルゴリズム高速化への道 - kivantium活動日記

    先日、アルゴリズムの授業でソートのアルゴリズムをいくつか習いました。ソートアルゴリズムの名前と原理くらいは聞いたことがありましたが、実装したことはなかったのでいい機会だと思い実装してみることにしてみました。ただ実装するだけでは面白くないので高速化の限界に挑戦してみたいと思います。 計測用プログラム 今回の計測では、ランダム値が入った配列のソートを100回行い、平均時間を各アルゴリズムに競わせるというシンプルなルールにしました。プログラムは以下の通りです。 C++11で入ったメルセンヌ・ツイスタなどの機能を使っているので、ビルド時には-std=c++11を指定する必要があります。 実験に使用したパソコンのCPUはCore i3-3227U@1.90GHz、コンパイラはgcc version 4.8.4で最適化オプションには-O3を指定しました。 #include <iostream> #in

    ソートアルゴリズム高速化への道 - kivantium活動日記
  • 状態遷移図/表、すなわち設計をコードでテストする

    状態遷移表からひな型コードを生成する この状態遷移表からコードを起こすわけですが、状態遷移の実装については『StateパターンでCSVを読む』を書きました。デザイン・パターンの一つ:Stateによる実装です。今回の実装はC、継承も仮想関数も使えないという利き腕を封じられた条件なので戦術を大きく変えにゃならんです。 状態遷移の実装は要するに「(1)現状態 と (2)受理したイベント の組」に対応する「(3)アクション と (4)遷移先(新たな状態)」を引き当てることに他なりません。ならば上記(1)~(4)の並びをレコードとし、そのレコード列(=状態遷移表)から「(1)現状態 と (2)受理したイベント の組」に一致するレコードを探し出して「(3)アクション を実行して (4)新たな状態 に遷移」すればいい。 状態遷移表からひな型コードの生成には使い慣れた「T4-template」を用います。

    状態遷移図/表、すなわち設計をコードでテストする