C++容器queue

C++容器queue

定义

  • 一种遵循先进先出(FIFO)原则的容器适配器。它基于其他序列容器实现,默认情况下使用deque作为底层容器
  • 队尾进,队首出

构造函数

1、默认构造函数

cpp 复制代码
int main()
{
	system("chcp 65001");
	queue<std::u8string> queue1;
	queue1.push(u8"北京");
	queue1.push(u8"上海");

	while (!queue1.empty())
	{
		// 返回队首数据
		cout << "queue1-> " << getStringFromU8string(queue1.front()) << endl;
		// 移除队首数据
		queue1.pop();
	}
}

2、拷贝构造函数

cpp 复制代码
int main()
{
	system("chcp 65001");
	queue<std::u8string> queue1;
	queue1.push(u8"北京");
	queue1.push(u8"上海");

	// 拷贝构造函数
	queue<std::u8string> queue2(queue1);
	while (!queue2.empty())
	{
		cout << "queue2-> " << getStringFromU8string(queue2.front()) << endl;
		queue2.pop();
	}

	while (!queue1.empty())
	{
		cout << "queue1-> " << getStringFromU8string(queue1.front()) << endl;
		queue1.pop();
	}
}

3、移动构造函数

被移动后,原队列数据清空

cpp 复制代码
int main()
{
	system("chcp 65001");
	queue<std::u8string> queue1;
	queue1.push(u8"北京");
	queue1.push(u8"上海");

	// 移动构造函数
	queue<std::u8string> queue2(std::move(queue1));
	while (!queue2.empty())
	{
		cout << "queue2-> " << getStringFromU8string(queue2.front()) << endl;
		queue2.pop();
	}

	while (!queue1.empty())
	{
		cout << "queue1-> " << getStringFromU8string(queue1.front()) << endl;
		queue1.pop();
	}
}

4、指定容器构造函数

cpp 复制代码
int main()
{
	system("chcp 65001");
	// 指定容器
	queue<std::u8string, list<std::u8string>> queue1;
	queue1.push(u8"北京");
	queue1.push(u8"上海");

	while (!queue1.empty())
	{
		cout << "queue1-> " << getStringFromU8string(queue1.front()) << endl;
		queue1.pop();
	}
}

常用函数

函数 说明 时间复杂度
void push(const T& value); value 添加到队列的末尾(队尾)。 O(1)
emplace( Args&&... args ) 元素就地构造,即不执行复制或移动操作 O(1)
void pop(); 移除队列的第一个元素 (队首)。注意:此函数不返回被移除的元素。 O(1)
T& front(); 返回对队列第一个元素 (队首)的引用。在调用前必须确保队列非空! O(1)
const T& front() const; 返回对队首元素的常量引用(用于 const 对象)。 O(1)
T& back(); 返回对队列最后一个元素 (队尾)的引用。在调用前必须确保队列非空! O(1)
const T& back() const; 返回对队尾元素的常量引用(用于 const 对象)。 O(1)
bool empty() const; 如果队列为空,返回 true,否则返回 false O(1)
size_t size() const; 返回队列中元素的数量。 O(1)
swap( queue& other ) 交换容器适配器与 other 的内容 O(1)
cpp 复制代码
int main()
{
	system("chcp 65001");
	queue<std::u8string> queue1;
	queue1.push(u8"北京");
	queue1.push(u8"上海");

	cout << "queue1.front()-> " << getStringFromU8string(queue1.front()) << endl;
	cout << "queue1.back()-> " << getStringFromU8string(queue1.back()) << endl;
	cout << "queue1.size()-> " << queue1.size() << endl;
	cout << "queue1.empty()-> " << boolalpha << queue1.empty() << endl;

	// 入队
	queue1.emplace(u8"广州");

	queue<std::u8string> queue2;
	queue2.push(u8"北京");
	queue2.push(u8"上海");

	// 交换
	queue1.swap(queue2);
	while (!queue2.empty())
	{
		cout << "queue2-> " << getStringFromU8string(queue2.front()) << endl;
		queue2.pop();
	}

	while (!queue1.empty())
	{
		cout << "queue1-> " << getStringFromU8string(queue1.front()) << endl;
		queue1.pop();
	}
}
相关推荐
️停云️16 小时前
【滑动窗口与双指针】不定长滑动窗口
c++·算法·leetcode·剪枝·哈希
charlie11451419116 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
wjs202416 小时前
Bootstrap5 消息弹窗
开发语言
资生算法程序员_畅想家_剑魔16 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin
IT=>小脑虎17 小时前
C++零基础衔接进阶知识点【详解版】
开发语言·c++·学习
nbsaas-boot17 小时前
Go vs Java 的三阶段切换路线图
java·开发语言·golang
码农小韩17 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
小L~~~17 小时前
绿盟校招C++研发工程师一面复盘
c++·面试
微露清风17 小时前
系统性学习C++-第十九讲-unordered_map 和 unordered_set 的使用
开发语言·c++·学习
BBBBBAAAAAi17 小时前
Claude Code安装记录
开发语言·前端·javascript