テンプレートまとめ②テンプレートクラス

〇例:スタッククラス

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 まで 〜

https://qiita.com/drken/items/7c6ff2aa4d8fce1c9361#stdbitset-%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E5%87%BA%E5%8A%9B

 

・ベクトルの要素検索

std::findでvector<int> vを検索

find(v.begin(), v.end(), i) でindexを返す

find(v.begin(), v.end(), i) == v.end() で存在するか判定

outlookメール受信時のマクロ実行

①Application_NewMailExを使う

②受信仕分け時にスクリプト実行(exeも可能)

 

②について

仕訳ルールで使えるサブルーチンは

Public Sub A(Byref  x as MailItem)

Public Sub A(Byref  x as MeetingItem)

のどちらかの宣言

 

VBAからメール送る

https://www.helpforest.com/excel/emv_sample/ex100008.htm

リンク集

・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過去問

https://kenkoooo.com/atcoder/#/table//

C#(VB.NET)について考えの整理

C++にあってC#にないもの

・クラスの多重継承はない

インターフェイスはある

そもそも多重継承するべきでない説

 

C#ではクラスの代入演算子はデフォルトで参照渡し

struct宣言したクラスは値渡し

 

・グローバル関数作れない

C#ならstatic class VB.NETならmoduleにどうぞ

 

・constの用法が限定されている

const参照渡しとかはなさそう

 

C#にはあってC++にない

LINQGUI関連など.NETライブラリ、GC、様々なシンタックスシュガーetc..

wikiがわかりやすい

https://ja.wikipedia.org/wiki/C_Sharp#C%E3%82%84C++%E3%81%8B%E3%82%89%E3%81%AE%E6%94%B9%E8%89%AF%E7%82%B9