构造函数中的迭代器 - 向量和数组

时间:2014-05-28 11:42:30

标签: c++ arrays class iterator

我遇到以下问题,我有这个课程:

class Foo {

  public:
    template<typename T>
    Foo(T begin, T end)
    : data(begin, end)
    {
       // implementation
    }

  private:
     std::vector<std::vector<double> > data; 
};

在内部我想要使用向量,但我想同时允许std::vectorstd::array当我传入向量时,这将有效,但是当我传入{{1}时我收到很多错误。

因此,当传入数组或向量时,是否可以使用以下方法(填充&#34;数据&#34;)?对不起,如果这个问题不够清楚。

2 个答案:

答案 0 :(得分:1)

也许你想要这个:

template<typename Seq>
Foo(const Seq& seq)
: data(std::begin(seq), std::end(seq))
{
}

然后你可以传入任何支持std :: begin和end的容器,甚至包括C风格的数组。

答案 1 :(得分:1)

我认为当您从std::array<std::array<double>>传递迭代器时,您会收到错误。这是因为无法将std::array<double>分配给std::vector<double>。您可以通过执行以下操作手动填充数据:

template<typename T>
Foo(T begin, T end)
{
    data.reserve(std::distance(begin, end));
    for (; begin != end; ++begin)
        data.emplace_back(begin->begin(), begin->end());
    // implementation
}