В дополнение к ответу Наваза, если вы хотите поддерживать любой тип контейнера, поддерживающий начало, конец и прямой итератор, вы можете использовать:
template <typename C>
Polyn(const C &a)
: params(a.begin(), a.end()), CalcDerivative(0) , CalcIntegral(0)
{
}
Таким образом, он также работает для std::list
с и std::maps
и все такое.Или, имея поддержку C ++ 11, вы на самом деле должны использовать даже более общие std::begin(a)
и std::end(a)
, так что это будет работать даже для простых массивов или чего-то еще, специализирующегося на std::begin
и std::end
.
Другой вариант, немного более похожий на STL, состоит в том, чтобы напрямую использовать итераторы в качестве аргументов, но тогда вам придется начинать / заканчивать вручную в клиентском коде (при вызове конструктора):
template <typename InputIterator>
Polyn(const InputIterator &b, const InputIterator &e)
: params(b, e), CalcDerivative(0) , CalcIntegral(0)
{
}