Physics-Station 2

旧 http://physics-station.blogspot.jp/ から当はてなブログに移行しました。間違ってるところがあればコメントください。記述の正確性は保証しません。

C/C++

Pocoで複数のPoco::Threadを管理してみる

筆者は世に出すサンプルコードのことを甘く見ているので、こんなコードではダメだということに気づかれた方は、お手数でもコメントにお書きください。よろしくお願いいたします。 Visual Studio 2013 は中途半端にC++11が実装されており、スレッドまわりの全…

テキストファイルの読み取りと、JSONファイルの読み取り方 特殊なサンプル1

ヘッダー #include <picojson.h> // あるファイルの情報を読み取り std::string read_txt(std::string filepath) { // ファイルの最初のbyteから最後のbyteまで読み取り std::string str((std::istreambuf_iterator<char>(std::ifstream(filepath))), std::istreambuf_iterator<char></char></char></picojson.h>…

Visual Studio の Cross Tools / Native Toolsって何?

x86_x64 Cross Tools Command Prompt for VS 2017 32bit パソコンで64bit パソコン用の実行ファイルを作る ただし、64bitパソコンでも動く x64 Native Tools Command Prompt for VS 2017 64bit パソコンで 64bit パソコン用の実行ファイルを作る x64_x86 Cro…

PocoをVisual Studio 2017でとにかくビルドするコマンド

Poco をダウンロードする。 pocoproject.org Visual Studio 2017の場合 x64 Native Tools Command Prompt for VS 2017 を起動し、次のコマンドを叩く buildwin.cmd 150 build all both x64 nosamples notests msbuild 「Windows SDK バージョン 8.1」が足り…

C++で任意の文字でstringを分割する方法

std::getlineは名前の通りstreamから1行ごとにstringを得る関数だが、デリミタ(delimiter)を指定することも可能である。分かれば簡単。 std::string str = "a_ab_abc"; std::stringstream ss(str); std::string item; std::vector<std::string> vitem; while(std::getline</std::string>…

Visual Studio 2017 + OpenCV 3.2.0 + x64の初期設定 とOpenCVに関する質問の受け付け(コメント欄へ)

Visual Studio 2017 x64 で OpenCV 3.2.0 を使う方法 OpenCVをとにかく使いたい。けどNuGetは使えない、使いたくないっていう人のために、2017/04/13時点での最新版のインストール方法を書きました。2.4.Xの頃と比べて.libの数が減って設定が楽になった。OpenCVは…

2個の自作クラスの配列(std::vector<MyClass>とか)から重複とかを探す

2個の数列(std::vector<int>とか)から重複とかを探す - Physics-Station2 の続き 2個の自作クラスの配列(ベクター)から重複等を探す方法。 #include <algorithm>に便利な関数が用意されている。 ソートして、重複を削除した後、set_intersection, set_union, set_difference</algorithm></int>…

Pocoによる共有メモリの書き込み・読み出しの実装例

Pocoはc++のライブラリの一つで、boostより比較的軽量に設計されている。バージョン1.7.3を使って共有メモリの書き込み・読み出しの実装例を書いた。 読み出しでもAM_WRITEになっているのは読み出しで先にOPENしてしまうと書き込みのほうで例外が投げられる…

PocoによるTCP/IP通信のサーバー・クライアント実装例

Pocoはc++のライブラリの一つで、boostより比較的軽量に設計されている。バージョン1.7.3を使ってTCP通信のサーバー・クライアントの実装例を書いた。例外処理は甘いところがあるので適宜変更されたし。 サーバーの実装例 #include <iostream> #include <Poco/Net/Socket.h> #include <Poco/Net/TCPServer.h> #in</poco/net/tcpserver.h></poco/net/socket.h></iostream>…

OpenCVのgpu::countNonZeroをgpu::Streamで高速化する

cv::gpu::countNonZeroをgpu::Streamで高速化したいという需要があったので、その解決策を書いておく。 opencvの2系のcountNonZeroはstreamを使うことが出来ない。そのため、非同期処理を行い高速化する際のボトルネックになる。cv::gpu::reduceは2次元画像…

3Dの位置と角度を持った情報の2次元プロジェクションマップ

CERNが開発しているROOT (バージョン5)を用いた検出器内の飛跡を2次元プロジェクションに投影して描画する方法。 具体的には三次元情報を持つ飛跡を二次元に投影したい時に使う。 #include <vector> #include <random> #include <limits> #include <TArrow.h> #include <TGraph.h> #include <TAxis.h> #include <TCanvas.h> #i</tcanvas.h></taxis.h></tgraph.h></tarrow.h></limits></random></vector>…

2個の数列(std::vector<int>とか)から重複とかを探す

2個の数列から重複等を探す方法。 続きは 2個の自作クラスの配列(std::vector<MyClass>とか)から重複とかを探す - Physics-Station2 #include <algorithm>に便利な関数が用意されている。 ソートして、重複を削除した後、set_intersection, set_union, set_differenceを使ってみ</algorithm></myclass>…

OpenMPでfor文を高速化する

openmpでfor文を高速化してみよう。OpenMPを有効にするには、Visual Studioのプロジェクトのプロパティページを開いて、C/C++の言語のOpenMPのサポートをはい(/openmp)にする必要がある。 例として1から50000までの数が素数(prime)かどうかを調べてみよう。…

Visual Studio 2013でstd::min std::maxが使えなくなった時の対処

std::max - cppreference.com Visual Studio 2013以降、Visual Studio 2015も完全にalgorithmに移動したらしいので以下の記述が必要。 #include <algorithm> //必要 int main() { int i = std::max(1,2); int j = std::min(3,4); } ちなみにVisual Studio 2012以下は以</algorithm>…

メモリリークしているソースコードの行を特定する

#include <cstdlib> #include <new> #include <memory> #include <crtdbg.h> #define _CRTDBG_MAP_ALLOC #define new ::new(_NORMAL_BLOCK, __FILE__, __LINE__) void main() { int *i = new int; _CrtDumpMemoryLeaks(); return; } これをデバックモードで実行すると Detected memory leaks!</crtdbg.h></memory></new></cstdlib>…

catchしなかった例外が発生した際の ***は動作を停止しました「WerFault」を表示させない

問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知されます。 を表示させないプログラムは以下のとおり。 #include <exception> #include <Windows.h> void main() { SetErrorMode(SEM_NOGPFAULTERRORBOX); t</windows.h></exception>…

マルチスレッドにおける例外処理の受け渡し (VC++)

別スレッド中の例外を、本スレッドに渡す方法のメモ。動作確認はVisual Studio 2013 C++で行っている。 詳しい説明は スレッド間の例外転送 を参照してね。 #include <thread> #include <iostream> //マルチスレッド用の関数 void f1(std::exception_ptr &eptr) { try { throw </iostream></thread>…