物理の駅 by onsanai

Physics Station → PhSt 質問・疑問・間違いの指摘は、コメントに書くか、直接伝えるときっと良いことがあります。主にWindows or Ubuntu用の記事です

C/C++

Visual Studio 2019 16.6でファイルシステムReFS上のstd::filesystem::removeが正しく動くようになった

Visual Studio 2019 プレビュー版の16.6が3月16日に公開されていたので、先日報告した件が修正されているか試した。 phst.hateblo.jp docs.microsoft.com #include <filesystem> #include <iostream> #include <fstream> #include <stdio.h> int main(int argc, char** argv) { std::error_code ec; s</stdio.h></fstream></iostream></filesystem>…

三項演算子の戻り値に基底クラスと派生クラスを入れた場合の挙動

三項演算子の戻り値に基底クラスと派生クラスを入れた場合、派生クラスの型は基底クラスに変換できないため、 どちらからも共通して変換できる基底クラスが戻ってくる 。 コード協力: H氏 #include <iostream> struct A { int func() const { return 0; } }; struct B </iostream>…

ファイルシステムReFSでstd::filesystem::removeがエラーコード 50 この要求はサポートされていません→16.6で修正予定

Hドライブで、ファイルの保存用にResilient File System (ReFS)を使ってる。 std::filesystem::remove がエラーコード 50で、この要求はサポートされていません。が帰ってきた。 ソースコード #include <filesystem> #include <iostream> int main() { std::error_code ec; std::fi</iostream></filesystem>…

点列で表された道のりを、ある長さごとに区切るアルゴリズム C++

点列を表すのにOpenCVの cv::Point2f を使ったが、OpenCVライブラリは使ってないので適宜置き換えて欲しい。 最後から1つめと、最後の点との距離はlengthではない。 std::vector<cv::Point2f> cell_length(const std::vector<cv::Point2f>& points, double length) { assert(points.siz</cv::point2f></cv::point2f>…

CCDカメラで撮像した画像をOpenCVを使って縞々模様を除去する

CCDカメラは読み出し方式による縞々模様(1行ごとに輝度の濃淡が発生する)現象が起こる。 通常、ハードウェア側で調整されるものだが、ソフトウェア側で調整する必要に迫られたので、そのコードを公開する。 なお、Visual Studio + C# + OpenCVSharp と C++を…

C++でコンストラクターを別のコンストラクターから呼ぶ方法 (C++11以上)

Can I call a constructor from another constructor (do constructor chaining) in C++? stackoverflow.com class Foo { public: Foo(char x, int y) {} Foo(int y) : Foo('a', y) {} };

boost 1.65.0 と C++17 でエラー

1>x:\boost_1_65_0\boost\operators.hpp(839): error C4996: 'std::iterator<std::output_iterator_tag,void,void,void,void>': warning STL4015: The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. (The <iterator> header is NOT deprecated.) The C++ Standard</iterator></std::output_iterator_tag,void,void,void,void>…

C++のstd::asyncでメンバー関数を使ったマルチスレッド処理

#include <future> #include <mutex> #include <iostream> std::mutex mtx3; class MyClass3 { int long_calc1(int j) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); mtx3.lock(); std::cout << "1 a" << std::endl; mtx3.unlock(); std::this_thread::sleep_for(</iostream></mutex></future>…

C++でstd::asyncを使ったマルチスレッド処理

#include <future> #include <thread> #include <vector> #include <iostream> #include <mutex> // 標準出力のmutex std::mutex mtx_; int long_calc(int i) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); mtx_.lock(); std::cout << "a" << i << std::endl; mtx_.unlock(); std:</mutex></iostream></vector></thread></future>…

C++でSleep

#include <thread> std::this_thread::sleep_for(std::chrono::milliseconds(1));</thread>

Visual Studio C++ x64のstd::ofstream のwriteには2GBの壁はない

The limitation of the size for the std::ofstream write is not 2GB in Visual Studio 2017. The limitation would be 64bit limits. std::vector<uchar> v(0x100000000); // 4GB (=2^32) std::ofstream ofs("o", std::ios::binary); ofs.write((char*)&v[0], v.s</uchar>…

C++のクラスをPythonから使うためにBoost::Pythonを使うまで

BoostのPython用ライブラリを使いたかったのでコンパイルする 参考文献。 Boostライブラリのビルド方法 - boostjp Boost 最新版をソースコードからビルドし、インストール(MSVC ビルドツールを使用)(Windows 上) Visual Studio 2019の x64 Native Tools …

yaml-cppをWindows10 Visual Studio 2017でコンパイルする

git clone https://github.com/jbeder/yaml-cpp cmake for Windowsで、 Visual Studio 2017の場合は、 YAML_CPP.slnを開く ALL_BUILDをビルド INSTALLをビルド で終わり。 最新のブランチでは、Visual Studio 2013 でコンパイルすることはできない。C++11絡…

OpenCVを使った画像内のピーク検出プログラム

ピークの周波数によって、途中のBoxFilterとGaussianBlurのカーネルサイズは変えると良い。 背景の強度を求めて、有意度を求めるのがこのプログラムのミソである。 var size = new OpenCvSharp.Size(nbin, nbin); Mat signal = Mat.Zeros(size, MatType.CV_3…

螺旋を描くためのC++ソースコード

uint64_t range = 1000; int x = 0; int y = 0; uint64_t loop = 0; uint64_t shift = 0; for (uint64_t i = 1; i < range * range; i++) { std::cout<<x<<" "<<y<<" "<<i<<std::endl; if (i == (loop * 2 + 1) * (loop * 2 + 1)) { loop++; shift = 0; x++; } else { shift++; if (shift >= loop * 6) { x++; } else if (s…</x<<">

filesystemを使ってディレクトリ(フォルダ)内にあるファイル等をリストしたりディレクトリを作成したり

VS2017の環境では、 /std:c++latest または /std:c++17 をコンパイルオプションに追加する必要がある。 #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main(int argc, char** argv) { if (argc == 1)return -1; fs::path path1(argv[1]); //ファ</filesystem></iostream>…

exeのfull pathとDLLのfull pathを得る方法

tbb.dll (例)のフルパスを得る方法と、実行中のexeそのもののフルパスを得る方法 char path[2048]; GetModuleFileNameA(GetModuleHandleA("tbb.dll"), path, 2048); cout << path; GetModuleFileNameA(NULL, path, 2048); cout << path; pathに日本語名が入…

OpenCV 2系でGPUで膨張処理をさせる方法

OpenCV 2系でGPUで膨張処理をさせる方法で詰まったので書いておく。最後に検証に使った全コードがあるのでどうぞ。 CPUで膨張処理をさせるとき、さくっと書けば次のようになる。 cv::Mat src, dst; int width = 256; int height = 256; src = cv::Mat::eye(c…

Pattern matching sample パターンマッチングサンプル

(ja) パターンマッチング可能な飛跡ファイル https://1drv.ms/f/s!Ap9xAxIuzM0xlLxu6slGIjkY3gSjNg Q1. どういう手段でもいいので、 beam_4372-2_u.txt の飛跡と beam_4372-2_d.txt の飛跡の位置ずれを計算しよう。 Q2. 計算方法について、互いに紹介しよう…

Read track text file

Read track files Track struct has 6 members. four double members and two int members. The double members include position x, position y, angle x, angle y. The int members include pulse height and pulse height volume. Q1. Make track class. …

文字型と整数型の上限値と下限値、各データ型のサイズ

参照: ATLAS Japan C++ Course -- Lesson 2 サンプルコード1 #include <iostream> #include <cstdint> using namespace std; int main(int argc, char** argv) { cout << "char min. = " << int(INT8_MIN) << " max. = " << int(INT8_MAX) << endl << "short int min. = " << IN</cstdint></iostream>…

テキストファイルの読み取りと、JSONファイルの書き出し・読み取り方

picojson.h は https://github.com/kazuho/picojson/blob/master/picojson.h からダウンロードすべし。 #include "picojson.h" #include <string> #include <iostream> #include <fstream> #include <sstream> //テキストファイルの読み取り inline std::string read_txt(std::string const& path</sstream></fstream></iostream></string>…

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.4.2 を使う方法 OpenCVをとにかく使いたい。けどNuGetは使えない、使いたくないっていう人のために、この記事の最終更新時点での最新版のインストール方法を書きました。2.4.Xの頃と比べて.libの数が減って設定が楽になりま…

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

2個の数列(std::vector<int>とか)から重複とかを探す - Physics-Station phst.hateblo.jp の続き 2個の自作クラスの配列(ベクター)から重複等を探す方法。Linuxのjoinコマンドを高速化する場合など。 #include <algorithm>に便利な関数が用意されている。 ソートして、重複を</algorithm></int>…

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次元画像…

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

2個の数列から重複等を探す方法。Linuxのjoinコマンドを高速化する場合など。 続きは 2個の自作クラスの配列(std::vector<MyClass>とか)から重複とかを探す - Physics-Station phst.hateblo.jp #include <algorithm>に便利な関数が用意されている。 ソートして、重複を削除した後</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>…