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

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
}

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

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

最佳答案

如果要创建数据的副本,则不必关心数据最初位于哪个容器中。这就是迭代器的优点:您不必关心。

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

  • 想要在中间频繁删除吗?考虑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
    }
    

    09-06 07:06