複数のテンプレート

2148 ワード

class template


:stl容器で広く使用されています.
vector ints;
vectordbs;
vectorcat;
->コンテナは資料型によって組織されていることを知っています.

->pushのmove部分に注意してください.
mainセクションでパラメータとして入力した値はRvalueです.
pushのelemパラメータはコピー代入を行わない.
レプリケーションでない場合、コンパイラは値1,2,3が消えたことを知っています.
copy elisionアクションができるので

  • また、pushのパラメータは参照タイプとして使用できません.
    定数にはアドレス値がないからです.

    以上のコードをアップグレードします!



  • 実際のスタックのpush関数のパラメータから,2つの過負荷がある.
    1) rValue

    2)LRealueを区切ります.


  • 実施部


  • コール部

    ->RvalueもValueもpushできるようにします.
  • ソースコード

    template <typename T>
    class Stack
    {
    private : 
    	vector<T>mVec;
    public : 
    
    	void push(T&& elem)
    	{
    		mVec.emplace_back(move(elem));
    	}
    
    	void push(const T& elem)
    	{
    		mVec.emplace_back(move(elem));
    	}
    
    	bool pop(T& elem)
    	{
    		if (mVec.size() == 0)
    			return false;
    		elem = mVec[mVec.size() - 1];
    		mVec.pop_back();
    		return true;
    	}
    };
    
    int main()
    {
    	Stack<int> stack;
    	stack.push(1);
    	stack.push(2);
    	stack.push(3);
    
    	int g = 4;
    	stack.push(g);
    
    	int n;
    	while (stack.pop(n))
    	{
    		cout << n << endl;
    	}
    
    	return 0;
    }