Я играл с шаблонами. Используя их, можно абстрагироваться от типа контейнера, например ниже вектор может быть любым типом POD.
template<class T>
void show(vector<T> &a) {
typename vector<T>::iterator end = a.end(), start = a.begin();
for(start; start!= end; start++) {
cout<<*start<<" ";
}
}
Я использую его так: vector<int> vect_storage; show(vect_storage);
vector<int> vect_storage; show(vect_storage);
Интересно, можно ли создать такой метод show, который мог бы показывать не только вектор, но и карту, список, dequeue из библиотеки STL?
Вместо того, чтобы принимать контейнер в качестве параметра, возьмите пару итераторов:
template <typename Iter>
void show(Iter first, Iter last) {
while (first != last) {
cout << *first++;
}
}
vector<int> v;
show(v.begin(), v.end());
deque<int> d;
show(d.begin(), d.end());
int arr[10];
show(begin(arr), end(arr));
pair<const K, T>
...
operator<<
overload, способный печатать один элемент, прежде чем вы сможете напечатать контейнер из них.
template<typename Cont> void show(Cont c) {
copy(cbegin(c), cend(c), ostream_iterator<decltype(*cbegin(c))>(cout, " "));
}
Ваше решение уже очень близко. Просто удалите спецификацию вектора как таковой и она будет работать.
template<typename T> void show(T& a)
{
auto end = a.end();
auto start = a.begin();
for(start; start != end; start++)
{
cout << *start << " ";
}
}
int main(int, char**)
{
vector<int> a(2,100);
show(a);
list<double> b(100, 3.14);
show(b);
return 0;
}