c++ - c++中序列容器和容器适配器的区别

标签 c++ stl containers

c++ 中的序列容器和容器适配器有什么区别?

这里我指的是序列容器作为 vector 、双端队列、列表,而容器适配器作为堆栈、队列、priority_queue。 我们什么时候更喜欢序列容器和容器适配器?

最佳答案

容器适配器使用包含来提供对序列容器功能的有限访问。许多容器适配器公共(public)方法只是对这个非公共(public)元素的调用的包装。如果您的应用程序可以忍受容器适配器的有限功能,那么最好使用容器适配器。

假设您只是直接使用其中一个序列容器来实现一个队列。您调用 push_front 将其添加到队列中,调用 pop_back 将其移除。现在出现了一些笨蛋维护者并调用 pop_front 而不是 pop_back。如果您不希望有人弹出您打算用作队列或堆栈的东西的错误端,请不要提供该功能。容器适配器有意不提供对底层序列容器的完全访问。

另一方面,如果您需要深入了解(例如,您需要查看堆栈中的第二个元素),您将需要使用序列容器而不是适配器。您可能想考虑使用适配器理念:不要导出容器的全部功能。只需导出真正需要的功能。

关于c++ - c++中序列容器和容器适配器的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7361251/

相关文章:

c++ - OpenGL VBO 不工作(C++)

azure - 如何创建 GitHub 工作流程以将 Azure 容器组部署到 ACI?

c++ - 使用 ostream_iterator 和运算符 << 显示指针 vector

docker - 将文件从基础图像复制到当前建筑物图像

c++ - 如何创建过滤 vector 的迭代器?

使用字符串时 C++ 未知覆盖说明符

c++ - 什么时候对象足够大以至于通过引用而不是通过值传递它可以提高性能?

java - 如何将多个摄像机的视频编码为一个 mkv 流?

c++ - 如何在我的 dll 接口(interface)或 ABI 中使用标准库 (STL) 类?

c++ - 混淆如何在 std::sort 和 std::priority_queue 中使用自定义比较函数