STL(Standard Template Library)队列是C++标准模板库中的一种容器,常用于实现先进先出的数据结构,它包含在<queue>头文件中。队列中的元素按添加顺序排队,并按照先进先出(FIFO)的原则检索并移除。 STL队列的用法十分简单,它提供了以下几个基本操作:
1. push():将元素插入队列的末尾
2. pop():从队列的开头移除元素
3. front():返回队列的第一个元素
4. empty():判断队列是否为空
5. size():返回队列中元素的个数
下面我们通过一些例子来了解具体的应用场景和操作方法。
例1:实现一个任务队列,执行任务的线程从任务队列的开头取出任务并执行,直到任务队列为空。 ```
#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
std::queue<std::string> taskQueue;
std::mutex queueMutex;
std::condition_variable queueCv;
void taskRunner() {
while (true) {
std::unique_lock<std::mutex> lock(queueMutex);
queueCv.wait(lock, []{return !pty();});
std::string task = taskQueue.front();
taskQueue.pop();
lock.unlock();
std::cout << "Executing task: " << task << std::endl;
//
}
}
void addTask(const std::string& task) {
std::unique_lock<std::mutex> lock(queueMutex);
桥梁钢模
taskQueue.push(task);
lock.unlock();
ify_one();
}
int main() {
std::thread t1(taskRunner);
std::thread t2(taskRunner);
addTask("Task 1");
addTask("Task 2");
t1.join();
离心制丸机
t2.join();
return 0;
}
```
在这个例子中,我们使用了线程和条件变量来实现任务队列的控制,任务通过addTask()函数添加到队列中,由taskRunner()函数从队列中取出并执行,任务队列为空时线程进入等待状态,直到任务队列中有新的任务被添加。 例2:计算斐波那契数列的前n项。
```
#include <iostream>
#include <queue>
int main() {
int n = 10;
std::queue<int> q;
q.push(1);
q.push(1);
for (int i = 2; i < n; i++) {
int a = q.front();
自动甩干拖把 q.pop();
int b = q.front();
q.pop();
std::cout << a << ' ' << b << ' ';
q.push(b);
android智能电视
q.push(a + b);
}
return 0;
}
```
在这个例子中,我们使用了队列来实现斐波那契数列的计算,初始时队列中包含前两个数,每次取出队列中的前两个数进行加法运算并将计算结果放回队列的末尾,直到计算完前n项。
总结:
STL队列是C++标准模板库中常用的容器之一,它提供了方便的封装和使用方式,可以用于实现先进先出的数据结构、任务队列、消息队列等,对于具体的使用场景,我们需要根据需求来选择合适的STL容器。
圣诞树灯