复制迭代器传递给构造函数到vector

Pho*_*rce -2 c++ iterator stl

我正在尝试复制通过向量中的构造函数传递的值.这是代码:

class Foo {

public:
    template<typename T>
    Foo(T begin, T end)
    {
        std::copy(begin, end, data.begin());        
    }

    void printVector()
    {
        cout << data.size();
    }
protected:
    std::vector<double> data;
};
Run Code Online (Sandbox Code Playgroud)

主要:

std::vector<double> data = {
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};

Foo::Foo f(

    std::begin(data),
    std::begin(data)
);

f.printVector();
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这不起作用?另外,如果我有一个std::vector<vector<double> > data2D矢量,并且,我传入了2D矢量的迭代器,是否可以将其复制到2D矢量?

谢谢

jua*_*nza 5

首先,你的矢量数据成员有大小0,所以你不能std::copy像你那样做.您应该使用构造函数初始化列表从两个迭代器初始化数据成员:

template<typename T>
Foo(T begin, T end) : data(begin, end) {}
Run Code Online (Sandbox Code Playgroud)

其次,您没有尝试复制任何元素.这完全打破了:

Foo::Foo f(
  std::begin(data),
  std::begin(data)
);
Run Code Online (Sandbox Code Playgroud)

它可能应该是

Foo f(std::begin(data), std::end(data));
Run Code Online (Sandbox Code Playgroud)