我有一个通过开始和结束接受容器的函数:
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
}
关于c++ - 复制迭代器传递的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33751340/