柚子快報(bào)激活碼778899分享:C++初階——stack
柚子快報(bào)激活碼778899分享:C++初階——stack
一、什么是stack
????????棧是一種容器適配器,專(zhuān)門(mén)設(shè)計(jì)用于在后進(jìn)先出(LIFO,Last In First Out)的上下文中操作,在這個(gè)上下文中,元素僅從容器的一端插入和提取。棧被實(shí)現(xiàn)為容器適配器,這些類(lèi)使用一個(gè)特定容器類(lèi)的封裝對(duì)象作為其底層容器,并提供一組特定的成員函數(shù)來(lái)訪問(wèn)其元素。元素從特定容器的“后端”被推入/彈出,這被稱(chēng)為棧的頂部。底層容器可以是任何標(biāo)準(zhǔn)容器類(lèi)模板或一些特別設(shè)計(jì)的容器類(lèi)。
二、stack的定義及初始化
2.1stack的定義
#include
#include
#include
using namespace std;
int main() {
stack<內(nèi)置類(lèi)型>s1; //定義一個(gè)儲(chǔ)存數(shù)據(jù)類(lèi)型為內(nèi)置類(lèi)型的stack容器s1
stack<自定義類(lèi)型>s2; //定義一個(gè)儲(chǔ)存數(shù)據(jù)類(lèi)型為自定義類(lèi)型的stack容器s2
stack
}
2.2stack的初始化
#include
#include
#include
using namespace std;
int main() {
vector
stack
}
三、stack成員函數(shù)
3.1empty函數(shù)
bool empty() const;//函數(shù)原型
????????返回棧是否為空:即其大小是否為零。這個(gè)成員函數(shù)實(shí)際上調(diào)用了底層容器對(duì)象的empty成員函數(shù)。
#include
#include
#include
using namespace std;
int main() {
vector
stack
stack
cout << s1.empty() << endl;//s1不為空,所以返回值為0
cout << s2.empty() << endl;//s2是一個(gè)空棧,返回值是1
}
3.2size函數(shù)
size_type size() const;
????????返回棧中的元素?cái)?shù)量。這個(gè)成員函數(shù)實(shí)際上調(diào)用了底層容器對(duì)象的size成員函數(shù)。
#include
#include
#include
using namespace std;
int main() {
vector
stack
stack
cout << s1.size() << endl;
cout << s2.size() << endl;
}
3.3top函數(shù)
reference top();
const_reference top() const;
????????返回對(duì)棧頂元素的引用。由于棧是后進(jìn)先出(LIFO)容器,棧頂元素是最后插入到棧中的元素。這個(gè)成員函數(shù)實(shí)際上調(diào)用了底層容器對(duì)象的back成員函數(shù)。
#include
#include
#include
using namespace std;
int main() {
vector
stack
cout << s1.top();
}
3.4push函數(shù)
void push (const value_type& val);
void push (value_type&& val);
????????在棧的頂部插入一個(gè)新元素,位于當(dāng)前頂部元素的上方。這個(gè)新元素的內(nèi)容被初始化為val一個(gè)副本。這個(gè)成員函數(shù)實(shí)際上調(diào)用了底層容器對(duì)象的push_back成員函數(shù)。
#include
#include
#include
using namespace std;
int main() {
vector
stack
s1.push(10);
cout << s1.top() << endl;
cout << s1.size() << endl;
}
3.5pop函數(shù)
void pop();
????????移除棧頂元素 從棧中移除位于頂部的元素,有效地將其大小減少一。被移除的元素是最近插入到棧中的元素,其值可以通過(guò)調(diào)用成員函數(shù)top來(lái)檢索。這會(huì)調(diào)用被移除元素的析構(gòu)函數(shù)。這個(gè)成員函數(shù)實(shí)際上調(diào)用了底層容器對(duì)象的pop_back成員函數(shù)。
#include
#include
#include
using namespace std;
int main() {
vector
stack
s1.push(10);
cout << s1.top() << endl;
cout << s1.size() << endl;
s1.pop();
cout << s1.top() << endl;
cout << s1.size() << endl;
}
3.6emplace函數(shù)?
template
????????在棧的頂部添加一個(gè)新元素,位于當(dāng)前頂部元素的上方。這個(gè)新元素是就地構(gòu)造的,而不是先構(gòu)造一個(gè)臨時(shí)對(duì)象然后再?gòu)?fù)制或移動(dòng)到容器中,將args作為其構(gòu)造函數(shù)的參數(shù)。這個(gè)成員函數(shù)實(shí)際上調(diào)用了底層容器的emplace_back成員函數(shù),并將args轉(zhuǎn)發(fā)給它。
? ? ? ? emplace不屬于匿名對(duì)象的用法。
#include
#include
#include
using namespace std;
class A
{
public:
int _a;
int _b;
A(int a = 0,int b = 0)
:_a(a),_b(b)
{}
};
int main() {
stack s1;
A a;
s1.push(a);
s1.emplace(10, 10);
cout << s1.top()._a << endl;
s1.pop();
cout << s1.top()._a << endl;
}
?3.7swap函數(shù)
void swap (stack& x) noexcept(/*see below*/);
????????這里的注釋/*see below*/指的是noexcept后面的表達(dá)式,它用于指定該函數(shù)是否可能拋出異常。在stack的swap函數(shù)中,這個(gè)表達(dá)式依賴于底層容器的swap函數(shù)是否可能拋出異常。
????????swap函數(shù)交換兩個(gè)stack對(duì)象的內(nèi)容。這是通過(guò)交換底層容器實(shí)現(xiàn)的,因?yàn)閟tack是一個(gè)容器適配器,它不直接存儲(chǔ)元素,而是依賴于一個(gè)底層容器。
#include
#include
#include
using namespace std;
int main() {
vector
vector
stack
stack
cout << s1.top() << endl;
cout << s2.top() << endl;
s1.swap(s2);
cout << s1.top() << endl;
cout << s2.top() << endl;
}
? ? ? ? 當(dāng)然,也可以通過(guò)標(biāo)準(zhǔn)庫(kù)里的模板swap函數(shù)進(jìn)行交換。
#include
#include
#include
#include
using namespace std;
int main() {
vector
vector
stack
stack
cout << s1.top() << endl;
cout << s2.top() << endl;
swap(s1, s2);
cout << s1.top() << endl;
cout << s2.top() << endl;
}
四、運(yùn)算符重載
bool operator==(const stack& lhs, const stack& rhs);
bool operator!=(const stack& lhs, const stack& rhs);
bool operator<(const stack& lhs, const stack& rhs);
bool operator>(const stack& lhs, const stack& rhs);
bool operator<=(const stack& lhs, const stack& rhs);
bool operator>=(const stack& lhs, const stack& rhs);
工作原理
相等性比較 (==):比較兩個(gè)棧是否包含完全相同的元素序列。 不等性比較 (!=):如果兩個(gè)棧不相等,則返回true。 小于比較 (<):使用字典序比較兩個(gè)棧的元素。 大于比較 (>):如果rhs小于lhs,則返回true。 小于等于比較 (<=):如果lhs小于或等于rhs,則返回true。 大于等于比較 (>=):如果lhs大于或等于rhs,則返回true。
????????這些運(yùn)算符的實(shí)現(xiàn)通常會(huì)委托給底層容器的相應(yīng)運(yùn)算符,這里的lhs和rhs分別是兩個(gè)對(duì)象的底層容器。這些比較運(yùn)算符會(huì)根據(jù)底層容器的元素順序和內(nèi)容進(jìn)行比較。
柚子快報(bào)激活碼778899分享:C++初階——stack
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。