我遇到以下问题,我有这个课程:
class Foo {
public:
template<typename T>
Foo(T begin, T end)
: data(begin, end)
{
// implementation
}
private:
std::vector<std::vector<double> > data;
};
在内部我想要使用向量,但我想同时允许std::vector
和std::array
当我传入向量时,这将有效,但是当我传入{{1}时我收到很多错误。
因此,当传入数组或向量时,是否可以使用以下方法(填充&#34;数据&#34;)?对不起,如果这个问题不够清楚。
答案 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
}