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
}