C++11 adapter介绍

前言

适配器这个概念我其实直到现在都还没有理解,不过我在刷面经的时候偶尔能看到这个面试点,所以咱们就一起来看看。(C++就是这样啊,真的会问的非常深入的)

粗浅的理解容器适配器

这还是在看完了ccyanxyz的文章后才豁然开朗。首先呢,adapter不仅仅只有容器适配器,它有约三个大的方面,分别是容器适配器、仿函数适配器、迭代器适配器。咱们先把容器适配器的概念讲清楚了,帮助你理解什么是适配器。
咱们都有手机,手机都有充电器。充电器接受的是220V的电压,然后这个手机充电器干了啥呢?它就是将220V的交流电源,转换成了手机使用的低电压直流电。
我是学自动化的,对强电也稍微了解一点。我能不能自己发挥点本领直接使用这220V的交流电给手机充电?当然可以啊,肯定行啊,我自有我的方法。但是我能这么干么?估计我也不是很敢这么干,毕竟那是220V,稍微一不小心我就GG。
好了,例子讲完了,咱们现在回到容器适配器上。C++11里有三个容器适配器,他们是stack,queue和priority_queue。咱们对这仨肯定很熟悉,老朋友了。可是你知道,他们底层是如何实现的么?你听说过C++的deque么?你难道不觉得,这个deque既可以用来当做stack,又可以用来当做queue么???同样的,你肯定听过vector,那你难道不觉得,vector也可以拿来做priority_queue用么?
好了,这下你就应该清楚了,咱们的容器适配器,其实就是底层容器deque或者vector在功能上的特化与封装。我当然可以直接用deque来当做stack用,肯定可以啊。不过我一般不这么做,就像是我不会直接拿220V电来给手机充电一样,原理上都是行得通的,但是适配器就将这个功能直接帮你做好,而且还不会有误操作的风险。

种类 默认顺序容器 可用顺序容器 说明
stack deque vector、list、deque
queue deque list、deque 基础容器必须提供push_front()运算
priority_queue vector vector、deque 基础容器必须提供随机访问功能

迭代器适配器

其实看完了上面的一部分,你应该就非常能理解适配器的含义了,所以这里的迭代器适配器肯定难不倒你。
C++ STL标准库给咱们提供了这些迭代器适配器:

1.插入迭代器适配器

这个很好理解,就是将你平常的一些给对象添加数据的操作转换成插入操作,然后搞成适配器给你用。这样的插入迭代器适配器有三种,分别是front_insert_iterator、back_insert_iterator和insert_iterator。看着很简单对吧?用起来也非常简单,这里就拿尾部插入迭代器适配器举个例子:

std::back_insert_iterator<Container> back_it (container);

2.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用VSCode编译C++代码时,可以通过配置来支持C++11的新特性。首先,需要确认你的g++版本是否支持C++11标准,可以使用命令"g++ --version"来查看。只有g++ 4.8及以上版本才支持C++11。如果你的版本符合要求,可以在编译时使用"-std=c++11"参数来启用C++11特性,例如"g++ -std=c++11 test_c11.cpp"。这样就可以编译支持C++11的代码了。然而,在VSCode的编辑区域内,可能会出现报警信息,比如"range-based for loop is a C++11 extension \[-Wc++11-extensions\]"。这是因为默认情况下,C/C++ Clang Command Adapter并不是配置为支持C++11的。你需要对其进行配置,以使其支持C++11。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [vscode支持c++编译](https://blog.csdn.net/qq_41940001/article/details/127848385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vscode配置c++11](https://blog.csdn.net/bitcarmanlee/article/details/124422105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值