/* *
* 模板類: 棧結(jié)構(gòu)[借助數(shù)組實(shí)現(xiàn)]
*/
template<typename T>
class Stack {
private:
T *data; /* 數(shù)組第一個(gè)元素地址,存放T類型數(shù)組元素 */
int size; /* 當(dāng)前棧實(shí)際填充數(shù)量 */
int capacity; /* 最大裝載量 */
public:
Stack(int m_capacity) : size(0), capacity(m_capacity) {/* 類構(gòu)造函數(shù)初始化列表進(jìn)行初始化變量, 降低拷貝賦值次數(shù) */
zz_log("Stack constructor");
data = new T[capacity];
zz_log("Stack capacity: %d, memory size: %u bytes", capacity, capacity * sizeof(T));
}
void push(T elem) {
if (size > capacity - 1) {
zz_log("Stack overflow");
return;
}
zz_log("Statck push [%d] elem", size);
data[size++] = elem;
}
T pop() {
zz_log("Stack pop [%d] elem", size - 1);
return data[--size]; /* 左減減,是由于在push操作后,size進(jìn)行了自增1, 為下次數(shù)據(jù)填充做準(zhǔn)備。所以要pop時(shí),要先向前移動(dòng)一位,才是最后一位 */
}
int empty() {
zz_log("Stack current elem count: %d", size);
return size;
}
~Stack() {
zz_log("Stack destructor");
delete[] data; /* data指針?biāo)赶虻膬?nèi)存,使用delete[]運(yùn)算符釋放。 */
data = NULL;
}
};
void test_stack()
{
zz_log("test_statck run");
Stack<int> s(2);
s.push(1);
s.push(2);
s.push(3);
zz_log("pop top elem from stack: [%d]", s.pop());
}
int main()
{
test_stack();
return 0;
}
知識(shí)點(diǎn):
在C++中,可以使用模板類來(lái)定義通用的數(shù)據(jù)結(jié)構(gòu)或算法,以適應(yīng)不同類型的數(shù)據(jù)。下面是定義一個(gè)模板類的基本語(yǔ)法:
template <typename T>
class ClassName {
// 類的成員和方法
};
在上面的代碼中,template <typename T>
表示這是一個(gè)模板類的聲明,T
是一個(gè)占位符類型,可以在類中使用。你可以根據(jù)需要選擇其他的占位符名稱,比如使用 class
關(guān)鍵字代替 typename
。
在模板類的定義中,你可以使用 T
作為類型參數(shù)來(lái)定義類的成員變量、成員函數(shù)和構(gòu)造函數(shù)。例如:
template <typename T>
class Stack {
private:
T* data;
int size;
public:
Stack(int capacity) {
data = new T[capacity];
size = 0;
}
void push(T element) {
data[size++] = element;
}
T pop() {
return data[--size];
}
};
上面的代碼定義了一個(gè)模板類 Stack
,用于表示一個(gè)棧數(shù)據(jù)結(jié)構(gòu)。T
是棧中元素的類型,可以是任意類型。在構(gòu)造函數(shù)、push
和 pop
方法中,可以使用 T
來(lái)聲明變量和參數(shù)的類型。
使用模板類時(shí),你可以根據(jù)需要指定具體的類型參數(shù)。例如:
Stack<int> intStack(10); // 創(chuàng)建一個(gè)存儲(chǔ)整數(shù)的棧
intStack.push(5);
intStack.push(10);
int poppedInt = intStack.pop();
Stack<double> doubleStack(10); // 創(chuàng)建一個(gè)存儲(chǔ)浮點(diǎn)數(shù)的棧
doubleStack.push(3.14);
doubleStack.push(2.718);
double poppedDouble = doubleStack.pop();
上面的代碼分別創(chuàng)建了一個(gè)存儲(chǔ)整數(shù)和浮點(diǎn)數(shù)的棧,并進(jìn)行了一些操作。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-662512.html
通過(guò)使用模板類,你可以在不同的類型上重用相同的代碼,提高代碼的復(fù)用性和靈活性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-662512.html
到了這里,關(guān)于【C/C++】實(shí)現(xiàn)模板類數(shù)據(jù)結(jié)構(gòu) -- 棧 (親測(cè)可用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!