【问题标题】:STL-Container styles and iterators that point to a specific type (C++)指向特定类型的 STL 容器样式和迭代器 (C++)
【发布时间】:2011-04-06 04:14:21
【问题描述】:

我有一个容器类(称为 Atom),我想在其中存储 Term 类型的对象。许多 STL 容器构造函数都有Container(Iterator first, Iterator last) 的形式来用一些元素集初始化容器。

现在,我希望能够将此表单用于我的 Atom 类,但我不确定如何将迭代器与其容器类分开。例如,目前我有:

class Atom {
public:
  Atom(std::string str, 
    std::vector<Term>::const_iterator start, 
    std::vector<Term>::const_iterator end);

这只允许向量迭代器。如何概括我采用的迭代器类型?

【问题讨论】:

    标签: c++ stl iterator


    【解决方案1】:

    当您需要概括类型时,请考虑模板:

    class Atom {
    public:
      template <typename ForwardIterator>
      Atom(std::string str, 
        ForwardIterator start, 
        ForwardIterator end);
    

    现在只需遍历范围,无论它可能是什么。

    【讨论】:

      【解决方案2】:

      您可以将构造函数声明为它自己的模板。只需将 startend 视为迭代器,如果它们支持该接口,它们就可以工作。不要担心强制迭代器处理类型Term。如果复制构造函数可以将其转换为Term,它将起作用。

      构造函数可能如下所示:

      template<typename I> Atom(std::string str, I start, I end);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-05
        • 1970-01-01
        • 2013-04-16
        • 2011-03-02
        • 1970-01-01
        • 2012-07-11
        • 2012-01-28
        • 2014-09-10
        相关资源
        最近更新 更多