定义

  • 一种遵循后进先出(LIFO)原则的容器适配器。它基于其他序列容器实现,默认情况下使用deque作为底层容器
  • 栈顶进,栈顶出
  • 不支持迭代

构造函数

默认构造函数

int main()
{
	system("chcp 65001");
	stack<std::u8string> stk;
	stk.push(u8"北京");
	stk.push(u8"上海");

	while (!stk.empty())
	{
		cout << getStringFromU8string(stk.top()) << endl;
		stk.pop();
	}
}

拷贝构造函数

int main()
{
	system("chcp 65001");
	stack<std::u8string> stk1;
	stk1.push(u8"北京");
	stk1.push(u8"上海");

	stack<std::u8string> stk2(stk1);


	while (!stk1.empty())
	{
		cout << "stk1" << getStringFromU8string(stk1.top()) << endl;
		stk1.pop();
	}

	while (!stk2.empty())
	{
		cout << "stk2" << getStringFromU8string(stk2.top()) << endl;
		stk2.pop();
	}
}

移动构造函数

int main()
{
	system("chcp 65001");
	stack<std::u8string> stk1;
	stk1.push(u8"北京");
	stk1.push(u8"上海");

	stack<std::u8string> stk2(std::move(stk1));


	while (!stk1.empty())
	{
		cout << "stk1" << getStringFromU8string(stk1.top()) << endl;
		stk1.pop();
	}

	while (!stk2.empty())
	{
		cout << "stk2" << getStringFromU8string(stk2.top()) << endl;
		stk2.pop();
	}
}

用底层容器构造函数

int main()
{
	system("chcp 65001");
	stack<std::u8string, vector<std::u8string>> stk1;
	stk1.push(u8"北京");
	stk1.push(u8"上海");

	while (!stk1.empty())
	{
		cout << "stk1" << getStringFromU8string(stk1.top()) << endl;
		stk1.pop();
	}
}

常用函数

函数 说明 时间复杂度
void push(const T& value); 将 value 压入栈顶(将构造好的数据的副本(或移动副本)添加到栈顶) O(1)
emplace( Args&&… args ) 直接在栈顶位置构造元素,不需要先创建完整的对象实例
void pop(); 移除栈顶元素。注意:此函数不返回被移除的元素。 O(1)
T& top(); 返回对栈顶元素的引用。在调用前必须确保栈非空! O(1)
const T& top() const; 返回对栈顶元素的常量引用(用于 const 对象)。 O(1)
bool empty() const; 如果栈为空,返回 true,否则返回 false O(1)
size_t size() const; 返回栈中元素的数量。 O(1)
swap( stack& other ) 交换内容
int main()
{
	system("chcp 65001");
	stack<std::u8string, vector<std::u8string>> stk1;
	stk1.push(u8"北京");
	stk1.push(u8"上海");

	stack<std::u8string, vector<std::u8string>> stk2;
	stk2.push(u8"张三");
	std::cout << getStringFromU8string(u8"交换前:") << std::endl;
	std::cout << getStringFromU8string(u8"stk1大小: ") << stk1.size() << std::endl;
	std::cout << getStringFromU8string(u8"stk2大小: ") << stk2.size() << std::endl;

	stk1.swap(stk2);
	while (!stk1.empty())
	{
		cout << "stk1-> " << getStringFromU8string(stk1.top()) << endl;
		stk1.pop();
	}
	while (!stk2.empty())
	{
		cout << "stk2-> " << getStringFromU8string(stk2.top()) << endl;
		stk2.pop();
	}
	std::cout << getStringFromU8string(u8"交换后:") << std::endl;
	std::cout << getStringFromU8string(u8"stk1大小: ") << stk1.size() << std::endl;
	std::cout << getStringFromU8string(u8"stk2大小: ") << stk2.size() << std::endl;
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐