复制迭代器传递的容器

时间:2015-11-17 07:28:06

标签: c++ templates c++11 iterator

我有从开始和结束接受容器的功能:

template <class Titerator>  int foo(const Titerator& begin_data, const Titerator& end_data);

在这个函数中我想做类似的事情:

While there is reaming data{
  Do something on the remaining data
  delete some of the remaining data that satisfied a condition
}

当然,扩孔数据是原始数据的副本(原始数据不会改变)

我想不出办法。我需要复制数据,以便我可以做任何我想要的但是如何复制它,而我不知道什么是容器?它是矢量,列表还是什么?我只有开始和结束。 如何在不失去通用概念的情况下定义此功能?

1 个答案:

答案 0 :(得分:3)

如果你想创建一个数据副本,你就不应该关心它最初所处的容器。这就是迭代器之美:你不必在意。

根据您想要对该副本执行的操作,为副本选择容器。

  • 想要在中间频繁删除?考虑std::list
  • 想要缓存友好,连续访问?考虑std::vector
  • ......等等。

像这样:

template <class Titerator>
int foo(const Titerator& begin_data, const Titerator& end_data)
{
  std::list<typename std::iterator_traits<Tierator>::value_type> myCopy{begin_data, end_data};
  // work on myCopy
}