目录
stack
stack的定义方式
stack的使用
queue
queue的定义方式
queue的使用
stack
stack
是一种容器适配器,专门用于处理后进先出的操作场景。它仅允许在容器的一端进行元素的插入和提取操作。
stack的定义方式
方式一: 使用默认适配器定义栈。
stack<int> st1;
方式二: 使用指定的适配器定义栈。
stack<int, vector<int>> st2;
stack<int, list<int>> st3;
注意: 如果未为
stack
指定特定的底层容器,默认情况下将使用deque
作为底层容器。
stack的使用
stack中常用的成员函数如下:
成员函数 | 功能 |
---|---|
empty | 判断栈是否为空 |
size | 获取栈中有效元素个数 |
top | 获取栈顶元素 |
push | 元素入栈 |
pop | 元素出栈 |
swap | 交换两个栈中的数据 |
emplace | 构造并插入元素 |
empty
empty
函数用于判断栈是否为空。它返回一个布尔值,如果栈为空则返回 true
,否则返回 false
。
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> st;
if (st.empty()) {
std::cout << "Stack is empty" << std::endl;
}
st.push(10);
if (!st.empty()) {
std::cout << "Stack is not empty" << std::endl;
}
return 0;
}
size
size()
用于返回当前栈中元素的个数。
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> st;
st.push(1);
st.push(2);
st.push(3);
std::cout << "Stack size: " << st.size() << std::endl; // 输出:3
return 0;
}
top
top
函数用于获取栈顶元素的引用。
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> st;
st.push(10);
st.push(20);
st.push(30);
std::cout << "Top element: " << st.top() << std::endl; // 输出:30
return 0;
}
push
push
函数用于向栈中添加元素,新的元素会成为栈顶元素。
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> st;
st.push(1);
st.push(2);
st.push(3);
std::cout << "Top element after push: " << st.top() << std::endl; // 输出:3
return 0;
}
pop
pop
函数用于移除栈顶元素,但不会返回该元素。
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> st;
st.push(10);
st.push(20);
st.push(30);
st.pop(); // 移除栈顶元素 30
std::cout << "Top element after pop: " << st.top() << std::endl; // 输出:20
return 0;
}
swap
swap
函数用于交换两个栈的内容。
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> st1, st2;
st1.push(1);
st1.push(2);
st2.push(3);
st2.push(4);
st1.swap(st2);
std::cout << "Top element of st1 after swap: " << st1.top() << std::endl; // 输出:4
std::cout << "Top element of st2 after swap: " << st2.top() << std::endl; // 输出:2
return 0;
}
emplace
emplace
函数用于在栈顶直接构造元素,而不需要先创建一个临时对象。
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<std::pair<int, int>> st;
st.emplace(1, 2);
std::cout << "Top element: (" << st.top().first << ", " << st.top().second << ")" << std::endl; // 输出:(1, 2)
return 0;
}
queue
队列(queue)是一种容器适配器,它用于实现先进先出(FIFO, First In First Out)的操作模式。在队列中,元素的插入操作只能在容器的一端(称为尾部)进行,而元素的提取操作只能在另一端(称为头部)进行。
因此,队列的第一个元素总是最先被移除,而最新添加的元素则位于队列的末尾,等待被处理。
queue的定义方式
方式一:使用默认的适配器定义队列。
queue<int> q1;
方式二:使用特定的适配器定义队列。
queue<int, vector<int>> q2;
queue<int, list<int>> q3;
注意:如果没有为
queue
指定特定的底层容器,默认情况下使用的是deque
(双端队列) 作为底层容器。
queue的使用
queue中常用的成员函数如下:
成员函数 | 功能 |
---|---|
empty | 判断队列是否为空 |
size | 获取队列中有效元素个数 |
front | 获取队头元素 |
back | 获取队尾元素 |
push | 队尾入队列 |
pop | 队头出队列 |
swap | 交换两个队列中的数据 |
emplace | 构造并插入元素 |
empty
empty
函数用于判断队列是否为空。它返回一个布尔值,如果队列为空则返回 true
,否则返回 false
。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
if (q.empty()) {
std::cout << "Queue is empty" << std::endl;
}
q.push(1);
if (!q.empty()) {
std::cout << "Queue is not empty" << std::endl;
}
return 0;
}
size
size
函数用于返回队列中元素的个数。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
std::cout << "Queue size: " << q.size() << std::endl; // 输出:3
return 0;
}
front
front
函数用于获取队列的第一个元素的引用。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(10);
q.push(20);
q.push(30);
std::cout << "Front element: " << q.front() << std::endl; // 输出:10
return 0;
}
back
back
函数用于获取队列的最后一个元素的引用。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(10);
q.push(20);
q.push(30);
std::cout << "Back element: " << q.back() << std::endl; // 输出:30
return 0;
}
push
push
函数用于向队列的尾部添加新元素。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
std::cout << "Queue elements after push operations: ";
while (!q.empty()) {
std::cout << q.front() << " ";
q.pop();
}
std::cout << std::endl;
return 0;
}
pop
pop
函数用于从队列中移除第一个元素,但不会返回该元素。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.pop(); // 移除第一个元素 1
std::cout << "Queue elements after pop: ";
while (!q.empty()) {
std::cout << q.front() << " ";
q.pop();
}
std::cout << std::endl;
return 0;
}
swap
swap
函数用于交换两个队列的内容。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q1, q2;
q1.push(1);
q1.push(2);
q2.push(3);
q2.push(4);
q1.swap(q2);
std::cout << "Queue 1 after swap: ";
while (!q1.empty()) {
std::cout << q1.front() << " ";
q1.pop();
}
std::cout << std::endl;
std::cout << "Queue 2 after swap: ";
while (!q2.empty()) {
std::cout << q2.front() << " ";
q2.pop();
}
std::cout << std::endl;
return 0;
}
emplace
emplace
函数用于在队列的尾部直接构造一个新元素,而不需要先创建一个临时对象。
示例:
#include <iostream>
#include <queue>
int main() {
std::queue<std::pair<int, int>> q;
q.emplace(1, 2); // 直接构造一个 pair<int, int> 对象
std::cout << "Front element: (" << q.front().first << ", " << q.front().second << ")" << std::endl; // 输出:(1, 2)
return 0;
}