c++ - 复制迭代器传递的容器

标签 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
}

当然铰孔数据是原始数据的拷贝(原始数据不会改变)

我想不出办法。我需要复制数据,这样我就可以对它做任何我想做的事情,但是当我不知道容器是什么时如何复制它?它是一个 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/

相关文章:

c++ - 如何确定两条直线是否(几乎)垂直/正交

python - 在 Django 中,如何在不使用模板时生成 csrf token

ruby-on-rails - Rails 和 I18n : localized templates vs localized string

c++ - Stxxl Vector 作为 std::vector 的替代品

c++ - 如何使用 time() 和 key(string) 为 srand 播种

c++ - Windows 获取卷上所有文件的大小列表

c++ - 如何使用C++和C从二进制文件读取整数

templates - 如何在 Angular 2中设置div的 "data-value"属性

C++ if (false) 条件评估?

c++ - 将 decltype 与带有尾随返回类型语法的模板化成员函数一起使用时,gcc 中的编译器错误但不是 clang