Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL(标准模板库)中使用的设计模式_C++_Design Patterns_Stl - Fatal编程技术网

C++ STL(标准模板库)中使用的设计模式

C++ STL(标准模板库)中使用的设计模式,c++,design-patterns,stl,C++,Design Patterns,Stl,我正在学习STL和设计模式。 我想知道是否有任何文档或链接可以解释如何在STL中实现设计模式 我在谷歌上搜索过,但是没有得到太多的数据。我想你的问题是设计模式没有在STL中实现。它们可以在C++中实现,并使用来自STL的容器和算法,但是STL和设计模式不以任何其他方式相关。 我的建议是通过阅读类似或的内容来了解STL。这将有助于学习STL可以为您做什么。然后,用C++的知识,深入了解STL的设计模式。 < P>希望你的意思是,“STL中可以识别出哪些设计模式”。 STL堆栈是一个容器适配器。适配

我正在学习STL和设计模式。 我想知道是否有任何文档或链接可以解释如何在STL中实现设计模式
我在谷歌上搜索过,但是没有得到太多的数据。我想你的问题是设计模式没有在STL中实现。它们可以在C++中实现,并使用来自STL的容器和算法,但是STL和设计模式不以任何其他方式相关。 我的建议是通过阅读类似或的内容来了解STL。这将有助于学习STL可以为您做什么。然后,用C++的知识,深入了解STL的设计模式。

< P>希望你的意思是,“STL中可以识别出哪些设计模式”。 STL堆栈是一个容器适配器。适配器是一种设计模式。迭代器也是一种设计模式。STL函数对象与命令模式相关

模式:

  • 适配器(容器适配器)
    • 堆叠
    • 排队
    • 优先级队列
  • 迭代器
  • 命令+适配器(功能适配器)
  • 迭代器+适配器(迭代器适配器)
    • 反向迭代器
    • 插入迭代器
    • 流迭代器
  • 模板方法(使用用户指定函数的STL算法)
  • 哪种创作模式?(分配器)

  • 这些模式的实现方式与它们在面向对象设计中的实现方式非常不同。Josuttis写道“STL概念与面向对象编程的原始思想相矛盾”。这就是造成您的问题混淆的原因。

    在STL中使用得相当多。

    STL大量使用模板。称之为参数化类型。模板对于定制设计模式解决方案或提出新的直观解决方案非常有用。(有关更多详细信息,请参阅“”中的“继承与参数化类型”一节)。熟悉STL(和)的优点是,它们是学习C++中模板(和元编程)的好来源,而这又可以用于设计更好的设计。p> 从C++11中,我们得到了三种类型,即共享ptr、唯一ptr和弱ptr,它们背后的模式是:代理模式

    std::vector::reference
    std::bitset::reference
    也是代理模式的例子

    STL是通用编程,而不是面向对象的。您需要重新标记。@kts:设计模式不是面向对象设计所独有的。您是否考虑过一些STL实现。源代码可以回答你很多问题。你可能找不到任何使用子类型的设计模式。你说的“设计模式是如何实现的”是什么意思?您使用设计模式来实现功能,而不是反过来。除此之外,STL实现依赖于平台(或编译器),没有通用实现。模板方法(使用用户指定函数的STL算法)STL和设计模式绝对相关。迭代器是一种设计模式。在STL中明确实现。@MartinYork-尽管名称不同,我不同意STL中迭代器的实现是迭代器设计模式的实现,就像指针一样。规范迭代器模式包括一种方法,用于确定遍历是否不再在不询问基础集合的情况下生成项。@D.Shawley:这就是为什么它被称为模式而不是设计。@D.Shawley:迭代器正在询问基础集合。这就是重点。它不会向用户公开它。