C++ Primer 适配器

本文探讨了适配器的概念及其在容器中的作用,并通过一个具体示例展示了如何使用栈来处理字符串中的括号及其内容替换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“适配器本质上是一种机制,能使某种事物的行为看起来想另外一种事物一样。一个容器适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型。”

我的理解是,适配器就是类似转换线,我们无需重新写一个新的容器,而只需利用适配器,就可以在原来容器的基础上进行一些操作。但那为什么不直接用原来的容器呢?我想可能是因为STL中的容器是通用模板十分强大,但我们在某些应用中并不需要,有时只需其中的一部分功能,这时用适配器则效率更高也不怕出错。

stack是后进先出,要求push_back、pop_back和back操作。

queue是先进先出,要求back、push_back、front和push_front操作。

此处给出stack的实例。

题目:将一个表达式中的括号及括号内的内容换为你所想要的值,并输出最终表达式。

#include<iostream>     //将括号及其内容换为#
#include<vector>
#include<string>
#include<stack>
using namespace std;        
int main()
{
	string str = "This is (Mooophy(awesome)((((wooooooooo))))) and (ocxs) over";
	stack<char> s;
	char replace = '#';
	int count = 0;
	for (auto &i : str)
	{
		s.push(i);
		if (i == '(')
			++count;
		if (count && i == ')')
		{
			while (s.top() != '(')
				s.pop();
			s.pop();
			s.push(replace);
			--count;
		}
	}
	string output;
	for (; !s.empty(); s.pop()) 
		output.insert(output.begin(), s.top());
	cout << output << endl;
	system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值