Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 复制迭代器传递的容器_C++_Templates_C++11_Iterator - Fatal编程技术网

C++ 复制迭代器传递的容器

C++ 复制迭代器传递的容器,c++,templates,c++11,iterator,C++,Templates,C++11,Iterator,我有一个函数,它接受容器的开头和结尾: template <class Titerator> int foo(const Titerator& begin_data, const Titerator& end_data); 当然,铰孔数据是原始数据的副本(原始数据不会更改) 我想不出一个办法来做这件事。我需要复制数据,这样我就可以在它上面做任何我想做的事情,但如何在我不知道容器是什么的情况下复制它?它是一个向量,一个列表还是什么?我只有开始和结束。 如何定义此函数

我有一个函数,它接受容器的开头和结尾:

template <class Titerator>  int foo(const Titerator& begin_data, const Titerator& end_data);
当然,铰孔数据是原始数据的副本(原始数据不会更改)

我想不出一个办法来做这件事。我需要复制数据,这样我就可以在它上面做任何我想做的事情,但如何在我不知道容器是什么的情况下复制它?它是一个向量,一个列表还是什么?我只有开始和结束。
如何定义此函数而不丢失通用概念

如果要创建数据的副本,不应该关心它最初位于哪个容器中。这就是迭代器的美妙之处:你不必在意

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

    在中间要经常删除吗?考虑<代码> STD::列表< /代码> .
  • 想要缓存友好的连续访问吗?考虑<代码> STD::向量< /代码> .
  • 。。。等等
像这样:

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
}
模板
int foo(常量滴定仪和开始数据、常量滴定仪和结束数据)
{
std::list myCopy{begin_data,end_data};
//研究霉菌病
}

我建议重命名模板参数…如果您不介意,请告诉我:您建议了什么以及为什么?以下是答案。谢谢..这似乎合乎逻辑。但总的来说,有没有办法将它复制到同一个容器类型?@HumamHelfawi没有。从“迭代器”到“容器”没有通用的方法。迭代器甚至不需要与容器对应——例如,一个原始指针满足迭代器概念的所有要求。更不用说像这样的事情了。
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
}