複数のテンプレート
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;
}
Reference
この問題について(複数のテンプレート), 我々は、より多くの情報をここで見つけました
https://velog.io/@kwt0124/여러-템플릿들
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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;
}
Reference
この問題について(複数のテンプレート), 我々は、より多くの情報をここで見つけました https://velog.io/@kwt0124/여러-템플릿들テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol