CPP

高速ログ出力ライブラリspdlogで日本語使う方法

cpp

以下定義する #define SPDLOG_WCHAR_FILENAMES #define SPDLOG_WCHAR_TO_UTF8_SUPPORT #define SPDLOG_WCHAR_FILENAMES #define SPDLOG_WCHAR_TO_UTF8_SUPPORT #include <iostream> #include "spdlog/spdlog.h" #include "spdlog/sinks/basic_file_sink.h" // support </iostream>…

STLの逆イテレーター

CPP

rbegin()とrend()を使う。逆順なんだけどイテレータは加算でOK。 for (auto ite = map.rbegin(); ite != map.rend(); ++ite) { .... } ネタ元 https://marycore.jp/prog/cpp/reverse-iterator-rbegin-rend/

std::stringのreplace()は単純に文字入れ替えてくれるような便利関数じゃない

cpp

find()して置換位置探したりなんだりと、工夫しないと行けない関数なのです。 ネタ元 https://marycore.jp/prog/cpp/std-string-replace-first-all/#replace%E9%96%A2%E6%95%B0%E3%81%AE%E8%87%AA%E4%BD%9C%E6%96%B9%E6%B3%95

C++ ファイル名だけの__FILE__ である __FILENAME__ を作る

cpp

__FILE__はフルパスなので使いにくい時がある #define __FILENAME__ (strrchr(__FILE__, '¥¥') ? strrchr(__FILE__, '¥¥') + 1 : __FILE__) ネタ元 https://stackoverflow.com/questions/8487986/file-macro-shows-full-path

picojson::objectを文字列 にして表示

CPP

picojson::valueにしてserialize()する // 文字列にするためにvalueを使用 picojson::value val(obj); // return std::string val.serialize(); std::cout << val.serialize(); // {"Name": "Yanai"} ネタ元 http://akira206.hatenablog.com/entry/2016/06/2…

C++でファイルの存在確認

CPP

PathFileExists() #include<Windows.h> #include<iostream> #include<Shlwapi.h> #pragma comment(lib, "Shlwapi.lib") int main(int argc, char* argv[]) { char path[] = ""; if (PathFileExists(path)) { std::cout << "file exists." << std::endl; } else { std::cout << "file doesn't </shlwapi.h></iostream></windows.h>…

C++ 文字列の暗号化/復号化

CPP

Win32API の Cryptography Functions を利用 ネタ元 https://www.hiramine.com/programming/windows/encryptdecryptstring.html コード // EncryptDecryptCR4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #…

Pocoというライブラリがあるらしい。

CPP

JSONあつかったり、REST APIとか、便利にいろいろできるらしい C++ REST SDKがMFCの影響か、なぜか使えなかった思い出があるので、 こっちに期待。 ネタ元 https://pocoproject.org/pro/docs/index.html https://www.qoosky.io/techs/8e92d3d34a http://mcom…

プロセスのメモリ情報を取得

CPP

GetProcessMemoryInfo()関数を利用します。プロトタイプ宣言 HANDLE OpenProcess( DWORD dwDesiredAccess, // アクセス・フラグ BOOL bInheritHandle, // ハンドルの継承オプション DWORD dwProcessId // プロセス識別子 ); BOOL CloseHandle( HANDLE hObjec…

C++でwebsocket

CPP

やっぱりC++が一番早いらしいが、管理が大変らしい。cppのサンプルがgithubにある。以下PJに依存する。JsonCpp - JSON encoding and decoding tclap - command line argument parsing websocketpp - websocket support boost - networking library ネタ元 We…

C#&アンマネージDLL 普通の配列の引渡し

GCHandle構造体を使うといいらしい。 [DllImport("hogehoge.dll")] private static extern int dll_TestFunc(int frameno, IntPtr ary, int aryCount); public int TestFunc(int frameno, ref float[] ary) { int len = ary.Length; GCHandle gcH = GCHandle…

STLで文字列を数値に変換する複数の方法

CPP

std::string str = "3.14"; int i = std::stoi(str); // 3 double d = std::stod(str); // 3.14 ネタ元 http://marycore.jp/prog/cpp/convert-string-to-number/

picoJSONでarray型の読み込み

CPP

イテレータ使う for (array::iterator it = glossary.begin(); it != glossary.end(); it++) { //title_list object& tmp = it->get<object>(); ネタ元 https://ja.stackoverflow.com/questions/14240/picojson%E3%81%A7array%E5%9E%8B%E3%81%AE%E8%AA%AD%E3%81%BF%E</object>…

メモリリークを追う方法 Visual Leak Detectorを使うパターン

CPP

以下よりダウンロードして、インストールする。 Visual Leak Detector for Visual C++ 2008-2015VC++ プロジェクトのプロパティから以下を設定する。 [C/C++] -[全般] - [追加のインクルードディレクトリ]に以下を追加。 C:\Program Files (x86)\Visual Le…

C++で簡単非同期プログラミング(std::thread,std::async) 

CPP

result.get()で処理を待って、値を返してくれる #include <future> ... auto result = std::async(std::launch::async, [] { return long_hogehoge(); }); // 非同期中の処理なにか std::cout << result.get() << std::endl;処理中かどうか判定をいれてその間アニメ</future>…

VARIANT型のラッパークラス_variant_t

CPP

VARIANTにはCComVariantや_variant_tといったラッパークラスがある. これらのクラスはコンストラクタで VariantInit()を,デストラクタでVariantClear()を行う. これによりクラス使用者はVARIANTの初期化と領域の解放を意識しなくてもよくなる. 他にもオ…

C++でSAFEARRAYやBSTRを使ったVARIANT型は解放の必要がある

CPP

内部で解放が必要な型が使われている場合(SAFEARRAYやBSTRなど)、 VariantClear()を使って解放を行う。 ネタ元 https://www26.atwiki.jp/ipubluedictionary/pages/17.html

C++で最頻値の求め方

cpp

#include <algorithm> #include <unordered_map> // 集計する std::unordered_map<unsigned int, size_t> hash; for(const auto &x : data){ if(hash.find(x) != hash.end()){ ++hash.at(x); }else{ hash[x] = 1; } } // 最大値の要素のインデックスを取り出す // 別途比較関数を書きたくなかったのでラムダ式</unsigned></unordered_map></algorithm>…

C++での中央値の求め方

cpp

vector使う要素の値でソートして中央の要素を返す 要素の数が偶数だったら中央2つの平均を返す loat median(vector<float> v) { float size = v.size(); vector<float> _v(v.size()); copy(v.begin(), v.end(), back_inserter(_v)); float tmp; for (int i = 0; i < size -</float></float>…

picojsonのネスト構造取得サンプル

CPP

try { element_value = root_value.get< picojson::object >().at( "aaa" ) .get< picojson::object >().at( "bbb" ) .get< picojson::object >().at( "ccc" ) .get< double >() ; } catch( ... ) { ... }ネタ元 https://gist.github.com/usagi/ad5886604913…

picojsonで項目がnullかどうか確認するには x.is<null> 

cpp

確認しないと もしその項目がなかったら例外飛んじゃう ネタ元 http://blog.livedoor.jp/tek_nishi/archives/4950982.html

PPLの並列アルゴリズム

CPP

parallel_sort() parallel_buffered_sort() parallel_radixsort()というstd::sort()より数倍早いソート関数も使える。 ネタ元 https://codezine.jp/article/detail/7632?p=3

シングルトンのベターな実装方法

cpp

mozc式シングルトンをお勧めらしい。 mozcはGoogle IMEです。singletonのテンプレートクラスを使う。 singleton.h class SingletonFinalizer { public: typedef void(*FinalizerFunc)(); static void addFinalizer(FinalizerFunc func); static void finaliz…

C++で今日の日付をyyyymmddで取得

CPP

#include <ctime> ... std::time_t rawtime; std::tm timeinfo; std::time(&rawtime); localtime_s(&timeinfo,&rawtime); long tmpYYYYMMDD = (1900+timeinfo.tm_year) * 10000 + (timeinfo.tm_mon+1) * 100 + timeinfo.tm_mday; ネタ元 http://stackoverflow.com/q</ctime>…

BSTRの文字列をAfxMessageBoxで表示する

CPP

_bstr_t経由でCStringにコピーして出力 void CVbsDlg::ShowBSTR(BSTR bstr) { _bstr_t bstrStart(bstr); CString s; s.Format(_T("%s"), (LPCTSTR)bstrStart); AfxMessageBox(s); } ネタ元 https://codezine.jp/article/detail/25

C/C++のXML Parserについてよくまとまっているサイト

C CPP

http://xoyip.hatenablog.com/entry/2014/07/21/193000 参照

お手軽jsonパーサー&シリアライザーPicoJSONの使い方

ヘッダファイルだけで実装できるjsonパーサー&シリアライザー。 std::map<>を使って直感的にアクセスできる。 シリアル化 #include "picojson.h" ... std::map<std::string,picojson::value> data; data["mojiretsu"] = picojson::value(_T("文字列")); data["BOOLvalue"] = picojson::va</std::string,picojson::value>…

bool型にint型の値を代入する時の警告の処理の定型文-C4800(C++)

CPP

三項演算子でスマートに。 int i = 1; bool j = (i!=0)?true:false; if(j) std::cout &lt;&lt; &quot;true&quot;; else std::cout &lt;&lt; &quot;false&quot;;ネタ元 http://c-crad.wktk.so/td/?p=216

doubleの==比較は思ったとおりにならない時ある

cpp

浮動小数点の比較の際の注意(訂正版) ※ 本補足資料の最初の版で、浮動小数点の絶対値を計算する関数を abs としていま したが、fabs の誤りでした。 C 言語で浮動小数点を使った数同士の比較を行うとき、整数の比較と同じ感覚で次のよ うに書いたプログラ…

メモリマップドファイルのサイズ変更のつもりでCloseHandle()してからCreateFileMappingしても同じ名前じゃ意味が無い

名前変えないと、結局前作ったハンドルが返ってくる。サイズも変わってない。プロセスを落とすまでそうなるらしい。 ひょっとして、同じ名前(今回の場合は、"MAPFILE")で 異なるサイズのオブジェクトを作成しようとしたりしていませんか?ネタ元 http://hp…