vector<int>
и векторы с другим типом элемента, например, vector<string>
, имеют разные типы и не имеют общего "супертипа", который вы можете передать своей "функции печати всех видов векторов".
Однако вы можете определить функцию шаблона, которая принимает тип элемента вектора в качестве параметра шаблона; при этом компилятор автоматически сгенерирует выделенную функцию печати для каждого типа элемента, который вы фактически используете:
template <typename T>
void PrintVect(const vector <T> &vect) {
for (auto val : vect) {
std::cout << val << " ";
}
std::cout << endl;
}
int main() {
vector <int> nums = {1, 2, 3};
PrintVect(nums);
vector <string> strings = { "one", "two", "three" };
PrintVect(strings);
}
Обратите внимание на const
и &
в void PrintVect(const vector <T> &vect)
; поскольку вектор не изменен, передача копии вектора была бы излишней; таким образом, тип параметра должен быть константной ссылкой, то есть const &
.