欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++之stack類的代碼及其邏輯舉例詳解

 更新時間:2025年09月10日 12:29:27   作者:啊吧怪不啊吧  
stack是一種容器適配器,專門用在具有后進先出操作的上下文環(huán)境中,其刪除只能從容器的一端進行元素的插入與提取操作,這篇文章主要介紹了C++之stack類的代碼及其邏輯的相關(guān)資料,需要的朋友可以參考下

1. stack介紹及使用方法

stack是一種后進先出的數(shù)據(jù)結(jié)構(gòu),所以在C++的STL庫中也同樣遵循了這一點,我們在使用的時候

不支持隨機訪問或迭代器遍歷。

注意事項

  • 調(diào)用 top() 或 pop() 前需確保棧非空,否則可能引發(fā)未定義行為。
  • stack 沒有 clear() 函數(shù),如需清空棧需手動循環(huán)調(diào)用 pop()。
  • 性能:所有操作的時間復(fù)雜度為 O(1)。

stack的底層是一個 deque<T>(雙端隊列),雖然deque是可以從兩端來進行操作的,但是我們只要只提供一端的接口,那么就可以來把它當(dāng)做stack來使用。

我們在空間上要把它理解成這個樣子,瘟疫這樣更好理解。

2. stack的常用接口

函數(shù)名作用
void push(const T& x)放一個元素進入stack
void pop()拋出一個元素
T& top()返回最后一個放入的元素
size_t size()返回stack里面的元素個數(shù)
bool empty()判斷是否為空

接下來我會一一實現(xiàn)這些端口。

3. template

在這里寫兩個calss是為了方便使用,這兩個模板參數(shù)實際上是各司其職,只是語法上要求寫在同一個 template<> 里,使用時會根據(jù)場景自動匹配對應(yīng)的參數(shù)。

  • 前面的 T 是明確指定棧中元素的類型(比如 int、string 等),這是棧對外提供的 “數(shù)據(jù)類型契約”—— 棧里只能存 T 類型的東西。
  • 后面的 Container 是指定用什么容器來存儲這些 T 類型的元素,而默認的 deque<T> 就是 “用雙端隊列來存 T 類型元素” 的意思。

PS:只寫后面那一個理論上來說也是可以的,但是會讓用戶使用門檻變高,比如想聲明一個存 int 的棧,用戶不能直接寫 stack<int>,而必須寫成 stack<deque<int>>(如果想用默認容器),或者 stack<vector<int>>。這會讓接口變得不直觀 —— 用戶需要先知道底層容器的類型,才能正確聲明棧,違背了 “棧是容器適配器,用戶無需關(guān)心底層實現(xiàn)” 的設(shè)計初衷。

PS:只寫前面哪一個是不行的,如果只寫 template<class T>,就意味著用戶無法指定底層容器了 —— 因為沒有 Container 這個參數(shù)來接收用戶自定義的容器類型。

template<class T, class Container = deque<T>>

4. private

這就是申明一個私有成員_con。

private:
		Container _con;

5.pop()

拋出最后一個元素(因為是后進先出)。

void pop()
{
	_con.pop_back();
}

6. top()

返回最后一個元素(不拋出)。

T& top()
{
	return _con.back();
}

7. size()

返回stack里面元素的個數(shù)。

size_t size()
{
	return _con.size();
}

8.empty

判斷是否為空,為空的話就返回true。

bool empty()
{
	return _con.empty();
}

9. push()

在尾部的位置上插入一個元素。

void push(const T& x)
{
	_con.push_back(x);
}

10. 總結(jié)

stack到這邊就講完了,作為 C++ 中常用的容器適配器,以簡潔的接口和靈活的底層設(shè)計,為 LIFO 場景提供了高效支持。理解其底層依賴deque的原因、掌握核心接口的使用規(guī)范,能幫助開發(fā)者在實際場景中更合理地選擇和使用stack,避免因誤用接口導(dǎo)致的邏輯錯誤。

以下是完整代碼:

#pragma once
#include<vector>
#include<deque>

namespace struggle
{
	// 
	template<class T, class Container = deque<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}

		void pop()
		{
			_con.pop_back();
		}

		T& top()
		{
			return _con.back();
		}

		size_t size()
		{
			return _con.size();
		}

		bool empty()
		{
			return _con.empty();
		}
	private:
		Container _con;
	};

總結(jié) 

到此這篇關(guān)于C++之stack類的代碼及其邏輯的文章就介紹到這了,更多相關(guān)C++ stack類代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論