テンプレートまとめ②テンプレートクラス
〇例:スタッククラス
template <typename T>
class Stack {
public:
explicit Stack(std::size_t capacity);
~Stack();
void Push(const T& data);
void Pop();
inline const T Top() const
{
return mData[mSP - 1];
}
inline std::size_t GetSize() const
{
return mSP;
}
inline std::size_t GetCapacity() const
{
return mCapacity;
}
private:
const std::size_t mCapacity;
T* mData;
int mSP;
};
template <typename T>
Stack<T>::Stack(std::size_t capacity) :
mCapacity(capacity),
mData(new T[capacity]),
mSP(0)
{
}
template <typename T>
Stack<T>::~Stack()
{
delete [] mData;
}
template <typename T>
void Stack<T>::Push(const T& data)
{
assert(static_cast<std::size_t>(mSP) < mCapacity);
mData[mSP] = data;
mSP++;
}
template <typename T>
void Stack<T>::Pop()
{
assert(mSP > 0);
mSP--;
}
通常のクラス定義の先頭に「template <typename T>」を付ける。
メンバ関数の定義を書く際にも、「template <typename T>」のような表記が必要。
クラステンプレートのメンバ関数の実体もヘッダファイル側に書く必要。
〇typedef
Tips for AtCoder
〇最大公約数の実装
再帰的には
int gcd(int x, int y)
{
return y==0 ? x:gcd(y,x % y);
}
再帰使わないなら
int gcd(int x, int y)
{
int temp;
while (y != 0) {
temp = y;
y = x % y;
x = temp;
}
return (x);
}
・最小公倍数の実装
int lcd(int x, int y){
return (x/gcd(x,y)*y);
}
※x/gcdはint型だから誤差の心配ない、先にgcdで割ることでオーバーフローしにくくする
〇bit演算
not...1と0を入れ替え→~
or...どっちかが1なら1→|
xor...01が一致したら0、一致しなければ1→^
and...両方1なら1→&
シフト→左シフトは<<1 右シフトは>>1
#include <bitset>
#include <iostream>
using namespace std;
int main(){
string s1 = "1100";
bitset<4> b1(s1);
b1 = b1 >> 2;
//"0011"になる
return 0;
}
参考:ビット演算 (bit 演算) の使い方を総特集! 〜 マスクビットから bit DP まで 〜
・ベクトルの要素検索
std::findでvector<int> vを検索
find(v.begin(), v.end(), i) でindexを返す
find(v.begin(), v.end(), i) == v.end() で存在するか判定
outlookメール受信時のマクロ実行
リンク集
・Blackモデル
Black (1976) Option Pricing Formula - GlynHolton.com
・みずほ情報総研SABRに関して
https://www.mizuho-ir.co.jp/publication/report/2017/fe25_01.html
・TortoiseGitのセットアップ
https://qiita.com/SkyLaptor/items/6347f38c8c010f4d5bd2
・インターネットの仕組み
https://qiita.com/naoki_mochizuki/items/7ee0e01db61e1e7abd62
・Atcoder過去問
python pandasについて
・read_csvとread_tableの違いは区切り文字
https://note.nkmk.me/python-pandas-read-csv-tsv/
・配列の種類
https://algorithm.joho.info/programming/python/list-tuple-dict-chigai/