我玩模板。使用它们可以从容器类型中抽象出来,例如下面的vector可以是任何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);
我想知道是否有可能创建这样的show方法,它不仅可以显示矢量,还可以显示STL库中的map,list和dequeue?
答案 0 :(得分:2)
取代将容器作为参数,取一对迭代器:
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));
答案 1 :(得分:1)
template<typename Cont> void show(Cont c) {
copy(cbegin(c), cend(c), ostream_iterator<decltype(*cbegin(c))>(cout, " "));
}
答案 2 :(得分:0)
您的解决方案已经非常接近了。只需删除矢量规范&amp;它会起作用。
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;
}