c++ - STL 容器 list、deque、vector 等的基类是什么?

标签 c++ templates search stl

我想编写一个函数,它可以采用 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/

相关文章:

c++ - vector of vector的初始化很慢

c++ - 重新播种 std::rand/c++11 <random>

c - 打印推力 vector 的模板函数

c++ - 根据模板参数添加成员函数和成员变量

mysql - 使用logstash Elasticsearch输出插件报错: NameError: SSLConnectionSocketFactory not found

python - 查找满足条件的 numpy 数组元素

mysql - 如何强制 MySQL 创建包含 1、2 和 3 个字母的单词的 FULLTEXT 索引?

c++ - 使用 Rabin Karp 进行模式搜索

java - OOP的缺点?

c++ - 是否有一些技巧可以让我将流操纵器传递给可变参数模板函数?