STL的容器适配器有何用处?一般用在什么地方?

viplpf 2009-08-04 08:30:09
最近看stl,对容器适配器不太理解,书中只是提了一下,没有详细讲解。请高手赐教,非常感谢。
...全文
713 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xianitzph 2011-09-10
  • 打赏
  • 举报
回复
学习了!
windsting 2009-08-05
  • 打赏
  • 举报
回复
我感觉 #5 楼说的挺到位,我看 C++ 编程思想 第二卷的时候看到这玩意跟LZ想法相仿,
觉得不是很有用。要我说有个大概印象就行了,好像我还真没见过这玩意被用到。
Malachi 2009-08-05
  • 打赏
  • 举报
回复
学习学习了 早上C++ Primer里刚看到过~~~
salali 2009-08-04
  • 打赏
  • 举报
回复
类似于数组,但比数组多了一些功能,也就是STL定义的一些函数
superspring 2009-08-04
  • 打赏
  • 举报
回复
找本书看吧,容器就是让你更方便的操作数据结构

比如有stack,有queue,都提供很方便的操作,你不用自己系代码

还有vector也一样,比数组好用多了,你不用数组担心越界这些东西

配合上stl的algorithm,容器就更好用了,可以进行各种各样的复制,查找,等等

如果英文不错的话,
看看http://www.cplusplus.com/reference/stl/ 里面的stl container

你就能基本掌握其用法
Dave888Zhou 2009-08-04
  • 打赏
  • 举报
回复
这是我以前回复别人一个帖子时说的:
adapter原意是插座、适配器、接合器的意思。现在我需要一个栈结构,我们可以用deque来实现,只在一端进行元素插入和弹出,另一端不动。这说明deque可以用作一个栈结构,但它又不能直接地严格地满足你的要求,因为你不能防止别人在另一端乱动你的东西。你需要对它进行一些包装,作一些限制,使之只能在一端进行插入和删除。也就是说你必须提供一个“插座”,这个“插座”一端插在deque上,另一端插在你的程序中,你就可以使用栈结构了。而stack就是这样的“插座”,它连接了deque和你的程序。表面上看你使用的是stack,实际上你是通过stack这个“插座”来使用deque(因为stack完全是用deque来实现的,它并没有任何其他的东西,它只是在deque上面作了一层包装,相当于一个“插座”的功能)。因此,stack、queue、priority_queue这样的类一般称为容器适配器,它们只是基本容器类型(vector,dequeue,list)的适配。
实际上,这也适配器模式的基本思想:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也就是说,在一个类的接口上提供一个“插座”类,使它变成你希望使用的接口。
pengzhixi 2009-08-04
  • 打赏
  • 举报
回复
容器适配器就是在容器的基础上实现自身特有的操作。

至于用在哪这个就不好说了。当要求的操作符合适配器的操作时就是用适配器。
机智的呆呆 2009-08-04
  • 打赏
  • 举报
回复
比如STL中stack的实现就是适配是想的。
lori227 2009-08-04
  • 打赏
  • 举报
回复
在遍历容器的时候用的最多,一般有用到容器 都会用到

下面iter end 都是迭代器,他指向的地址里面就是容器里面的值
vector<int>::iterator iter = m_vecInt.begin();
vector<int>::iterator end = m_vecInt.end();

for( ; iter != end; ++iter)
{
cout << (*iter) <<"\n";
}

cout << endl;
晨星 2009-08-04
  • 打赏
  • 举报
回复
就是由基本的容器适配(改造)出来的那些容器,其它没啥特殊的。
比如stack,因为我们可以把stack理解成只是对vector、deque或list的访问加一点限制而已(只能从头部访问),所以没有必要把stack做成一个基本容器,使用其它的基本容器再稍微封装改造一下就OK了,所以stack在STL中就只是一个“容器适配器”,而不是一个基础容器。

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧