Свойство, которое вы хотите, называется ковариацией.И ответ «нет», вы не можете сделать это: векторы не являются ковариантными.
Канонический пример того, почему это не разрешено, выглядит следующим образом:
class Deriv2 : public Base {
public:
virtual ~Deriv2(){}
};
void f(vector<Base *>& v){
v.push_back(new Deriv2); // oops, just pushed a Deriv2 into a vector of Deriv
}
Если вы не добавляетеэлементы вектора, вы можете просто передать пару input итераторов.Передача выходных итераторов также не будет работать.
template <typename InputIterator>
void f(InputIterator first, InputIterator last);
f(v.begin(), v.end());