C++ std::无序_集和std::vector之间的多态性?

C++ std::无序_集和std::vector之间的多态性?,c++,stl,C++,Stl,我在代码中有一个函数,它包含C++容器对象,并使用循环读取其中的每个元素。函数看起来有点像这样: void function(std::unordered_set<unsigned int> container) { for(auto it = container.begin(); it != container.end(); it++) { /* Do something */ } } void函数(std::无序集容器) { for(aut

我在代码中有一个函数,它包含C++容器对象,并使用循环读取其中的每个元素。函数看起来有点像这样:

void function(std::unordered_set<unsigned int> container)
{
    for(auto it = container.begin(); it != container.end(); it++)
    {
       /* Do something */
    }
}
void函数(std::无序集容器)
{
for(auto-it=container.begin();it!=container.end();it++)
{
/*做点什么*/
}
}

但是,我希望这个函数也接受std::vector类型的容器。从代码中可以看出,函数体不需要知道容器的类型(它可以使用*it访问每个元素)。如何在代码中没有冗余的情况下实现这一点?

出于性能原因和更“通用编程”(与OOP相反)的世界观或任何STL容器设计时没有考虑多态性的原因;相反,正如STL算法所做的那样,您需要公开一个基于泛型迭代器的接口,并使用提供给您的任何迭代器类型。

出于性能原因和更“泛型编程”(与OOP相反)的世界观,或者任何STL容器的设计都没有考虑多态性;相反,与STL算法一样,您需要公开一个基于泛型迭代器的接口,并使用提供给您的任何迭代器类型。

类似于:

template<typename ContainerType>
void function(ContainterType container)
{
  ... 
}
模板
void函数(ContainerType容器)
{
... 
}
你应该做你想做的

您需要一个模板,因为STL容器没有一个通用的基类,所以它们不能通过,因为“这是基类,采用任何派生类型”

假设您不想修改容器,我会选择:

template<typename ContainerType>
void function(const ContainterType& container)
{
   ...
}
模板
void函数(const ContainterType和container)
{
...
}
避免复制。

类似于:

template<typename ContainerType>
void function(ContainterType container)
{
  ... 
}
模板
void函数(ContainerType容器)
{
... 
}
你应该做你想做的

您需要一个模板,因为STL容器没有一个通用的基类,所以它们不能通过,因为“这是基类,采用任何派生类型”

假设您不想修改容器,我会选择:

template<typename ContainerType>
void function(const ContainterType& container)
{
   ...
}
模板
void函数(const ContainterType和container)
{
...
}

避免复印。

+1。更明确地说,
模板void函数(迭代器开始,迭代器结束)
,称为ala
函数(container.begin(),container.end())
,也有接受数组元素指针、输入迭代器等的好处。更明确地说,
template void函数(迭代器begin,迭代器end)
,称为ala
函数(container.begin(),container.end())
,还具有接受数组元素指针、输入迭代器等的优点。。