概括标准库容器的输出函数

时间:2013-10-26 00:07:58

标签: c++ templates stl

我玩模板。使用它们可以从容器类型中抽象出来,例如下面的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?

3 个答案:

答案 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;
}