【问题标题】:Heterogeneous list of containers in C++C ++中的异构容器列表
【发布时间】:2015-02-24 15:23:34
【问题描述】:

我有一个项目,我必须在其中创建一个包含 n 个容器的异构列表,其中将给出 n。容器可以是列表、队列或堆栈,它们中的每一个都必须实现bool member(T const& x) 方法,该方法检查容器中是否存在对象。我还必须为异构列表创建一个迭代器,它可以遍历所有容器的每个元素(不同容器中的所有元素将属于同一类型)。

我的想法是有一个包含member 方法的接口和 3 个新类,每个类都继承自接口和 stl 容器(我知道这是个坏主意,但我不想编写自己的列表,队列和堆栈类)。至于异构列表,我认为有一个类的数据成员是接口类的列表或向量。

我不知道该怎么做的事情是:我如何从一个泛型类型 T 的 stl 容器中完全继承。不知道这样的事情是否可以工作:

template <typename T>
class MyList : public list<T>, CommonInterface

另外我最大的问题是如何为异构列表制作迭代器,以便它可以遍历容器的所有元素。我的想法是将所有元素转移到一个向量对象,并使用它的迭代器(我猜是一种包装)。

欢迎对此问题提出任何想法和解决方案。如果问题有什么不清楚的地方,我会尽快澄清。

【问题讨论】:

  • 这是一个坏主意 - STL 容器没有虚拟析构函数,因此如果您按照您的意愿进行操作,它们将不会被正确清理。见stackoverflow.com/questions/2034916/…
  • 你已经有了迭代器,它支持一些异构
  • 如果您决定继承 stl 容器,这在最后一个 cmets 中是一个坏主意,一旦在 scott meyers 的有效 stl 书中更精确地继承,一次应该私下而不是公开继承。
  • 不要认为缺少虚拟析构函数会是个问题,因为这是一个学校项目,我不会创建那么多容器。你也可以澄清一下迭代器部分,因为我不知道如何做有问题的特定迭代器。谢谢:)
  • @MohamedAli 为什么要使用私有继承,那样我会丢失容器类的所有公共方法,我不想写公共方法只是为了调用它们。

标签: c++ list stl queue containers


【解决方案1】:

这比您想象的要复杂得多。主要原因是 C++ 是静态类型的,因此不适用于这种方法。 但一种解决方案是使用一组静态容器和一个 unordered_map,以便在您遍历特定类型的容器时能够选择正确的容器。

查看此 repo 和示例 https://github.com/hosseinmoein/DataFrame

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2021-03-17
    • 2014-11-30
    • 2023-03-27
    相关资源
    最近更新 更多