我想编写一个函数,它可以采用 STL 泛型列表、双端队列或 vector 中的任何一个,并在其中搜索键。这个函数的方法签名是什么?我们如何实现它?
我所知道的是,如果我们在函数参数中接受任何派生类,我们可以使用基本抽象类,假设所有相关的派生类都具有您的问题所需的函数。
编辑:我们不能在函数参数中传递容器的迭代器。如果我们可以,那很容易。它必须是一个容器。
我在想:假设“Container”是来自 STL 容器的抽象基类(根据下面的第一个答案,它不是)。
模板 bool Search(std::Container C, T& key);
谢谢
最佳答案
正如 SergeyA 在他的回答中提到的,C++ 的 STL 没有多态容器(与 Java 或 C# 接口(interface)相反)。
关于您请求的函数签名,查看 STL <algorithm>
header 。有很多函数对某些数据进行操作,使用指向数据 block 开头和结尾的两个指针(迭代器)。例如,
template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );
搜索一些 value
在 [first, last)
.
如果你真的想将整个容器传递给函数,你会类似地写
template<class Container, class T>
bool Search(const Container& container, const T& value)
{
for (auto iterator = container.begin(); iterator != container.end(); ++iterator)
{
if (*iterator == value)
return true;
}
return false;
}
关于c++ - STL 容器 list、deque、vector 等的基类是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563193/