タグ

C++に関するMonMonMonのブックマーク (324)

  • C++1zの言語拡張まとめ - Faith and Brave - C++で遊ぼう

    2017年中に改訂される予定のC++14の次のバージョン、仮称C++1zの更新内容をまとめました。正式名称はISO/IEC 14882:2017、通称C++17になる予定です。 C++1zの概要 C++17は、C++11ほど大きな変更はありませんが、重要な言語機能(構造化束縛とか)や、広く適用できるライブラリ機能が多く入っています。ライブラリは、ファイルシステムが入るのが大きいですね。ようやく標準ライブラリのみで、ファイルサイズを取得したり、ファイルのコピーや移動などを扱えるようになります。 策定体制として、Study Group (SG)と呼ばれる専門家グループがたくさん作られ、そこで同時並行に議論、策定が進められていた仕様のうち、固まったものがいくつかC++1zで導入されます。 それぞれの専門家グループで考えられた仕様はTechnical Specification (TS)という単位

    C++1zの言語拡張まとめ - Faith and Brave - C++で遊ぼう
  • スレッド間のデータ共有に使える「Microsoft PPLの並列コンテナ」

    スレッド間のデータのやり取りにstd::vector<t>は向かない 5年近く前のアーティクル:『C++11:スレッド・ライブラリひとめぐり』で、10万未満の素数の総数を求めるサンプルを示しました。これをベースに、素数の個数を求めるだけでなく、見つけた素数:int pを引数に関数オブジェクトf(int)を呼ぶよう少しばかり手を加えます。関数オブジェクト内でstd::vector<int<>に見つけた素数pを追加(push_back(p))します。シングルスレッドだとこんなコードになりますか。 #ifndef PRIME_H_ #define PRIME_H_ #include <mutex> #include <functional> #include <cmath> // nは素数? inline bool is_prime(int n) { int sqn = (int)sqrt((f

    スレッド間のデータ共有に使える「Microsoft PPLの並列コンテナ」
  • All Major C++17 Features You Should Know

    The ISO Committee accepted and published the C++17 Standard in December 2017. In this mega-long article, I’ve built (with your help!) a list of all major features of the new standard. Please have a look and see what we get! Language Features New auto rules for direct-list-initialization static_assert with no message typename in a template template parameter Removing trigraphs Nested namespace defi

    All Major C++17 Features You Should Know
  • #Anthony Calandra / モダンC++の機能 | POSTD

    (注:2017/10/25、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) (注:2017/02/07、タグが誤っていたので修正いたしました。) C++11/14/17 概要 C++11/14/17に関する記述や例の多くは、様々なリソース(詳しくは謝辞の項目をご覧ください)を参考にしており、それらを自分の言葉でまとめてみました。 C++17には、以下の新しい言語機能が導入されています。 クラステンプレートに対するテンプレート引数の推論 autoによる非型テンプレートパラメータの宣言 フォールド式 かっこ付き初期化リストを持つauto推論の新しい規則 constexprラムダ インライン変数 入れ子になった名前空間 構造化されたバインディング 初期化子によるステートメントの選択 constexpr if C++17には、以下の新しいライ

    #Anthony Calandra / モダンC++の機能 | POSTD
  • Motion JPEG Streaming Server

    Implementing a MJPEG (or Motion JPEG) streaming server that can be used to steam screenshots or any other source of images over the HTTP protocol to any web browser client (MJPEG stream writer is included in the library) Download source files - 44.3 KB Download demo project - 11.2 KB For mobile clients: Other clients (such as Firefox, Chrome and VLC player): Introduction Motion JPEG is a stream of

    Motion JPEG Streaming Server
  • 非同期アレコレ - Qiita

    前回の記事の続きというか、補足というか、蛇足というか。 あれから 結論としてstd::mutex使おう、と勝手に放り投げたのですが 速度的にメチャクチャ遅くて、ちょっと使い物にならないなぁという結果になったので コメント頂いた内容など含めて、速度を検証してみました 単純な排他制御コストの比較なので、他のところで早くしろっていうツッコミは無しよ? (例:OpenMPのリダクション指示節とか) ※追記:std::mutexが異常に遅いというのは、VisualStudio2013の問題だったようです。 テストプログラム 概要 int型のグローバル変数に加算処理をして、最終的な変数値を確認するという 色気も何もあったもんじゃないテストを実行して、処理時間と演算結果を確認します 排他制御については、前回の記事のコメントを参考にさせて頂いてます。 環境 Windows 7 (64bit) 上で確認 開

    非同期アレコレ - Qiita
  • C++ programming with Visual Studio Code

    Version 1.90 is now available! Read about the new features and fixes from May. C/C++ for Visual Studio Code C/C++ support for Visual Studio Code is provided by a Microsoft C/C++ extension to enable cross-platform C and C++ development on Windows, Linux, and macOS. When you create a *.cpp file, the extension adds features such as syntax highlighting (colorization), smart completions and hovers (Int

    C++ programming with Visual Studio Code
  • cereal + boost json_parserによるjsonファイル入出力の一例 - Rokiのチラ裏

    題名は何だかやたら大々的だがそんな大した事はしていない。 あるところで、シリアル番号を生成したいという案件が来たというような話を伺った。まあ、ちょいちょいとやれば簡単に実装できるとの話だったので、「そうですね」と私は答えた。「そうですね」と答えた以上、ある程度書けなくてはならない。そんなわけで、cerealとboost json_parserを使って一応雑に帰りの電車の中で書くだけ書いた。*1 シリアル番号は連番。一応ユーザー数が露見しないよう可逆スクランブルしてその値を16進値としてユーザーに渡す。 スクランブル値とデスクランブルのための値をjsonで保持する。 可逆スクランブルのアルゴリズムは簡潔的にするためMersenne twisterで得られた一定の値を単に足している。変えたくなったら関数オブジェクトでも渡せるような設計にすればおk #include<iostream> #inc

    cereal + boost json_parserによるjsonファイル入出力の一例 - Rokiのチラ裏
  • C++メモ STLをできるだけ使ってCSVを読み込んでみる | tetsuyanbo

    2014/07/23C++ 野暮用で必要になったので。 ざっくりこんな感じ。 fstreamクラスを使ってファイルを開く istringstreamクラスを使って区切り文字で文字列を分ける vectorクラスを使って分けた文字列をリストにする んで、コード。 今回はCSVを読み込むのはメソッドにしとく事にして、こんな感じ。 // インクルード #include <iostream> #include <string> #include <vector> #include <fstream> #include <sstream> // ※istringstreamを使うために必要 // 名前空間 using namespace std; // // CSVを取得する // filename 読み込むファイル名 // table 読み込んだCSVの内容 // delimiter 区切り文字(今

    C++メモ STLをできるだけ使ってCSVを読み込んでみる | tetsuyanbo
  • GitHub - nothings/single_file_libs: List of single-file C/C++ libraries.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - nothings/single_file_libs: List of single-file C/C++ libraries.
  • クラス内テンプレートクラスと継承を利用してmake_sharedでprivateコンストラクタを呼ぶ - Qiita

    enabled_shared_from_thisを用いる場合、コンストラクタをprivateにしてshared_ptrを返すcreate関数を用意する方法が有効です。 だけど、create関数内でmake_sharedを使いたいけどprivateなコンストラクタが呼べないという問題があります。 その問題を回避するため、関数内クラスと継承を用いた手法があります。 std::make_shared から private コンストラクタを呼び出す #include <memory> struct X : std::enable_shared_from_this<X> { std::shared_ptr<X> create(); private: X(){} }; std::shared_ptr<X> X::create() { struct Helper:X { Helper():X(){} }

    クラス内テンプレートクラスと継承を利用してmake_sharedでprivateコンストラクタを呼ぶ - Qiita
  • いっつも忘れるC++ ファイル入出力関数を図にしてみた - Qiita

    継承関係 継承関係については、 https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html 真ん中らへんの図 がわかりやすそうです。 ファイル入出力関数のダイアグラム さて、C++でファイルの入出力を扱うに当たって、C言語のscanf系やprintf系は結構落とし穴があるので、C++のifstreamとか〇〇streamとかを使いたいのですが、いつも使い方を忘れてしまいます(私だけではないはず)。そこで、普段使いに便利なダイアグラムをつくってみました!: ※2については、https://www.jpcert.or.jp/sc-rules/c-int06-c.html あたりも参考にしてください。あ、strtol関数はstdlib.hをincludeです。 サンプル #include <string> #include <i

    いっつも忘れるC++ ファイル入出力関数を図にしてみた - Qiita
  • Difference between exit and quick_exit

  • [C++] 簡単なシリアライザでも作ろうか

    8月です。圧倒的に時間が足りません。 さて、それは置いといて、C++でシリアライズしたいシチュエーションってありますよね。例えばゲームのセーブデータとか、ゲームのセーブデータとか。あとはゲームのセーブデータとかかな。 最初に答えをいってしまうと、まぁboost::serialization使えってことになるんですが、でもそれって面白く無いじゃないですか。boostでかいし、ちょっとシリアライズするために使うのもなんだかアレじゃないですか。まぁとりあえずそういうことにしといてください。 というわけでサクッと簡単にシリアライズするクラスでも作ってみました(丸一日かかったなんて言えない)。 いわゆる車輪の再発明ってやつで、しかも汎用的に使うにはちょっと問題ありな感じになっています。所詮は私の勉強の記録なので、そこら辺はご了承ください。 方針 今回は以下のような方針に沿って実装しました。 とにかく

  • WebSocket大合戦:Clojure、C++、Elixir、Go、NodeJS、Ruby | POSTD

    Webアプリにリアルタイムの双方向通信が必要な場合、WebSocketを選ぶのは自然なことだと思います。では、どのツールでWebSocketサーバを構築すべきでしょうか。パフォーマンスは重要ですが、開発のプロセスも見過ごしてはなりません。パフォーマンスを基準にするだけでなく、開発のしやすさも考慮に入れるべきでしょう。今回の大合戦では、Clojure、C++、Elixir、Go、NodeJS、Rubyのそれぞれの言語によって慣用的な手法で実装されたシンプルなWebSocketサーバを比較したいと思います。 テスト内容 サーバに実装するのは、 echo と broadcast の2つのメッセージのみを扱う非常に単純なプロトコルです。echoは送信クライアントに返され、ブロードキャストは全ての接続クライアントに送信されます。そしてブロードキャストが完了すると、結果メッセージが送信者に返されます。

    WebSocket大合戦:Clojure、C++、Elixir、Go、NodeJS、Ruby | POSTD
  • 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
  • 高速なハッシュテーブルを設計する | POSTD

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

    高速なハッシュテーブルを設計する | POSTD
  • C/C++プログラマのための開発ツール

    Windows 11 information that can be used at the development siteAtomu Hidaka

    C/C++プログラマのための開発ツール
  • C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ・ラボの光成です。 先日、社内で主にLinux上でC/C++を用いている開発者向けの講義をしました。 「こんなことができる」と知ってもらい、興味を持てば各自で勉強してもらおうと広く浅くツールを紹介しました。 gtags, ASan, Valgrind, addr2line, cppcheck, SystemTap, perfなどです。 興味があれば講義資料「C/C++プログラマのための開発ツール」をごらんください。 コンパイラオプション 受講者には新人やサイボウズ・ラボユースの学生もいたので基的なところから紹介しました。 C/C++コンパイラを使うときはできるだけ警告オプションをつけるのが望ましいです。 警告が出るのは自分のコードの書き方に不備があることが多いからです。 gccやclangでは-Wall -Wextraは基としてそれ以外にも有用なオプションがあります(C++

    C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ
  • C++1z 古くなった機能を非推奨化 - Faith and Brave - C++で遊ぼう

    C++1zから、標準ライブラリのいくつかの機能が非推奨となります。非推奨となった機能は将来のバージョンで削除される可能性がありますのでご注意ください。 std::iteratorクラス 自作イテレータを作るときに基クラスとして使用するstd::iteratorクラスですが、これを使ってもイテレータを定義するのはあまり簡単になりませんでした。 このクラスを使用することによって問題がより複雑になってしまうケースもありましたので、非推奨となります。 Boost.Iteratorのようなイテレータを簡単に定義するための新たな仕組みは提供されませんので、標準ライブラリの範囲では、イテレータは最初から最後まで自分で定義することになります。 std::allocatorクラスのいくつかのメンバと、std::allocator<void> C++11からアロケータの中間インタフェースとデフォルト実装を提

    C++1z 古くなった機能を非推奨化 - Faith and Brave - C++で遊ぼう