ハムスターに飼われる院生のブログ

自分用メモが中心のブログです。

C++

既存クラスを呼び出すか継承クラスを呼び出すかif関数で選択し、仮想関数を実行

C++

既存クラスOperationManagerを継承したクラスMethod_Aがあるとする。 既存クラスを呼び出すか、継承したクラスを呼び出すか、メイン関数からifで選択するようにした時のコードは以下の通り。 int main() { bool keisyou= true; OperationManager *operation;…

LNK2038の対処

C++

Visual Studio 2017 でDebugビルドはできるがReleaseビルドができず LNK2038 '_ITERATOR_DEBUG_LEVEL'の不一致が検出されました。値'2'が0の値'(ファイル名).obj'と一致しません。 とエラーが出た。これを解消した時の手順をメモしておく。プロジェクトのプ…

C++で複数行のデータを読み込んでひとつのベクトルに格納する

C++

改行を含むコンマ区切りのデータを一つのvectorに格納する場合。 fileの内容は以下の通りでintが6つである。 1,10,100, 2,20,200,#include <iostream> #include <string> #include <fstream> #include <sstream> using namespace std; class InputManager { private: public: void Get_TxtData(st</sstream></fstream></string></iostream>…

オブジェクトポインタを使用してクラスを切り替える

C++

OperationManagerを基本クラスとし、それに追加機能をつけるクラスAdditionalManagerを考える。 存在するクラスは以下の2つ。 ・OperationManager ・AdditionalManager(これはOperationManagerを継承している)この時両クラスには同名の関数virtual void fun…

コマンドライン引数をまとめて処理する関数の作成

C++

コマンドライン引数をまとめてベクトルに入れておけば、メイン関数をすっきりと書くことができる。 main関数では以下の処理を行う。 vector<string> input; for (int i = 1; i < argc; i++) input.push_back(argv[i]); この読み込んだinputを別のクラス内でstoiやsto</string>…

複数のクラスで同じインスタンスを使用する

C++

複数のクラスで共通のインスタンスを使用する方法 特にメルセンヌツイスターを使用している時によく使うので、メルセンヌツイスターを例に以下にコードを残す。 メイン関数とクラス(Class1)で共通のインスタンスを使用する例。main.cpp #include <iostream> #include "</iostream>…

除算時の丸め込み回避

C++

C++ にて、 int a=30; double y=1/a; cout<

VisualStudio2017でGoogleTestを実行できるようにする

C++

VisualStudio2017でGoogleTestを実行するための環境設定について かなり手間取ったので結論を覚え書きしておく GoogleTestをダウンロードする ~/googletest/msvc/2010/gtest.slnを開き、ビルドする(出てきた選択肢にはOK) GoogleTestを導入したいプロジェ…

mapのキーにvectorを用いた場合のmapの挙動確認

C++

mapのkeyとしてvectorを用いた場合、vectorの0番目の要素の大きさでソートされることを確認した。 確認した際のサンプルコードは以下の通り。 int main() { map<vector<double>, int> test; vector<double> vec1; vec1.push_back(10.0); vec1.push_back(100); vector<double> vec2; vec2.pus</double></double></vector<double>…

デバッグ時によく使う自作関数

C++の話。 EigenのVectorXdとMatrixXdをよく利用する。 格納されている中身を確認する際に 毎回for文をまわすことが面倒に感じる。 したがって、以下の関数を作成した。 void cout_eig(MatrixXd mat) { for (int i = 0; i < mat.rows(); i++) { for (int j =…

multimapの使い方

C++

以前、以下のリンクの記事にてmapの使用法を示した。 chicagopile1-75.hatenablog.commapでは、キーの値が重複した場合、値を複数保持できないという仕様になっている。 例えば、以下のような状態である。 int main(){ map<int, int> test; test.insert(std::make_pair</int,>…

業務効率化の小技

IME辞書の単語/用例の登録で以下の変換を登録したところ スムーズになったのでメモ読み:ふぉr 語句: for (int i = 0; i こうすれば、ふぉrと入力して変換するだけで、for文を書くことができる。

mapの使用例

C++

map使用の具体例として、最小値のキーに対応する要素を得る関数を以下に示す。 insertを使用するとキーの値に応じて自動でソートされるため便利。 #include <map> #include <iostream> using namespace std; int map_test() { map<int, int> test; map<int, int>::iterator itr=test.begin(); te</int,></int,></iostream></map>…

乱数シードを変えてプログラムを繰り返し実行する

乱数シードを少しずつ変えてプログラムを繰り返し実行する時用のメモ。C++とbatファイルに関する話。メイン関数自体に引数を渡すようし、batファイルで異なる引数を与えることで実現させる。乱数のシードをコマンドラインから与えられるようにするため、main…

EigenのVectorXiをメンバ変数にする

C++

C++の話。 EigenのVectorをメンバ変数とする場合に 一手間必要だったためメモ。EIGEN_MAKE_ALIGNED_OPERATOR_NEW の一文をpublicに入れる必要があった。MyClassというクラスにて、VectorXi をメンバ変数として使用する場合の例を以下に示す。まずはヘッダフ…

C++デバッグ時によく使う小技

C++

デバッグモードで実行した場合のみ実行されるようにするには以下のようにする。 #ifdef _DEBUGcout<<"デバッグモードでのみ実行される"<