我有通过开始和结束接受容器的功能:
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
}