C++面试八股文之STL标准模板库使用详解

 更新时间:2023年06月22日 10:50:18   作者:二进制架构  
这篇文章主要为大家介绍了C++面试八股文之STL标准模板库使用详解,<BR>有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

面试模拟

某日二师兄参加XXX科技公司的C++工程师开发岗位第21面:

面试官:用过STL吗?

二师兄:(每天都用好吗。。)用过一些。

面试官:你知道STL是什么?

二师兄:STL是指标准模板库(Standard Template Library),是C++区别于C语言的特征之一。

面试官:那你知道STL的六大部件是什么?

二师兄:分别是容器(container)、迭代器(iterator)、适配器(adaptor)、分配器(allocator)、仿函数(functor)和算法(algorithm)。

面试官:那你知道有哪些容器吗?

二师兄:STL中容器的数量比较多,按照类型可以分为顺序容器和关联容器。

二师兄:顺序容器主要有vectordequelistforward_listarray。其中forward_listarray是C++11引入的。

二师兄:关联容器主要有setmapmultisetmultimapunordered_setunordered_mapunordered_multisetunordered_multiamp。其中后四种是C++11新引入的。

面试官:好的。那你知道迭代器分为哪些种类吗?

二师兄:分别是输入迭代器(Input Iterator)、输出迭代器(Output Iterator)、前向迭代器(Forward Iterator)、双向迭代器(Bidirectional Iterator)和随机访问迭代器(Random Access Iterator)。

二师兄:其中输入和输出迭代器分别用于读取和写入数据,前向迭代器只能向前访问而不能向后访问(forward_list),双向迭代器既可向前也可向后(list),随机访问迭代器可以通过下标访问任何合法的位置(vector)。

面试官:你知道适配器是做什么的吗?

二师兄:适配器是一种设计模式。主要起到将不同的接口统一起来的作用。STL中的容器适配器如stackqueue,通过调用容器的接口,实现适配器所需的功能。

面试官:有了解过分配器吗?

二师兄:分配器主要用于内存的分配与释放。一般容器都会自带默认分配器,很少会自己实现分配器。

面试官:有使用分配器做一些内存分配的工作吗?

二师兄:没有。。。

面试官:知道仿函数是做什么用的吗?

二师兄:是一个可执行的对象,类型重载了operator()()运算符。

struct Add
{
    int operator()(int a, int b) {return a +b;}
}
int a = 42, b = 1024;
auto sum = Add()(a,b);
//OR
Add add;
auto sum = add(1,2);

面试官:STL中常见的算法有哪些?

二师兄:一般分为三类,查找、排序和数值操作。

二师兄:查找常用的有std::findstd::find_ifstd::find_first_of等。

二师兄:排序主要用std::sort及其家族的一系列算法。

二师兄:数值操作主要用std::accumulate求和。

面试官:那你知道STL六大部件之间的联系吗?

二师兄:(想了想)不是特别清楚。。。

面试官:好的,回去等通知吧。

让我们回顾一下二师兄的表现:

有使用分配器做一些内存分配的工作吗?

这里主要是问有没有手写过分配器:

template <typename T>
class MyAllocator {
public:
    typedef T value_type;
    MyAllocator() noexcept {}
    template <typename U>
    MyAllocator(const MyAllocator<U>&) noexcept {}
    T* allocate(std::size_t n) {
        if (n > std::size_t(-1) / sizeof(T)) throw std::bad_alloc();
        if (auto p = static_cast<T*>(std::malloc(n * sizeof(T)))) return p;
        throw std::bad_alloc();
    }
    void deallocate(T* p, std::size_t) noexcept {
        std::free(p);
    }
};

实例中定义了一个名为MyAllocator的模板类,它重载了allocatedeallocate运算符用于分配内存和释放内存。示例中mallocfree函数来分配和释放内存,也可以用newdelete

我们可以在allocatedeallocate中做很多事情,比如我们可以统计申请和释放内存的总量,可以申请一块大内存做内存池等等。

知道STL六大部件之间的联系吗?

这个问题比较开放,需要对STL六大部件有一定的理解。首先是分配器,主要是为容器分配管理内存的。其次是迭代器,是容器和算法的桥梁。再次是仿函数,一般用作算法中,适配器提供各种粘合剂的功能,把不同部件之间的接口连接起来。

以上就是C++面试八股文之STL标准模板库使用详解的详细内容,更多关于C++面试STL标准模板库的资料请关注脚本之家其它相关文章!

相关文章

  • C语言求阶乘之和的三种实现方法(先阶乘再累加)

    C语言求阶乘之和的三种实现方法(先阶乘再累加)

    对于C/C++初学者来说,可能会经常遇到如计算阶乘等问题,下面这篇文章主要给大家介绍了关于C语言求阶乘之和的三种实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • C语言数组实现公交车管理系统

    C语言数组实现公交车管理系统

    这篇文章主要介绍了C语言数组实现公交车管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言实现可增容动态通讯录详细过程

    C语言实现可增容动态通讯录详细过程

    这篇文章主要为大家介绍了C语言实现简易通讯录的完整流程,此通讯录还可以增容,并且每个环节都有完整代码,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-05-05
  • C++中实现矩阵的加法和乘法实例

    C++中实现矩阵的加法和乘法实例

    这篇文章主要介绍了C++中实现矩阵的加法和乘法实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • C++输出上三角/下三角/菱形/杨辉三角形(实现代码)

    C++输出上三角/下三角/菱形/杨辉三角形(实现代码)

    本篇文章是对C++中输出上三角/下三角/菱形/杨辉三角形的示例代码进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • Qt自绘实现苹果按钮滑动效果的示例代码

    Qt自绘实现苹果按钮滑动效果的示例代码

    这篇文章主要介绍了Qt自绘实现苹果按钮滑动效果的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Qt自定义控件实现多彩色仪表盘

    Qt自定义控件实现多彩色仪表盘

    这篇文章主要为大家详细介绍了Qt自定义控件实现多彩色仪表盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 数组和指针的区别深入剖析

    数组和指针的区别深入剖析

    在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的
    2012-11-11
  • C语言修炼之路初识分支句 循环助本心上篇

    C语言修炼之路初识分支句 循环助本心上篇

    现实生活中我们经常需要根据不同的条件做出不同的选择。程序设计中也需要根据条件来选择不同的程序进行处理,这称之为分支结构,当条件表达式不存在时,它被假设为真。您也可以设置一个初始值和增量表达式,一般情况下,C 程序员偏向于使用 for(;;) 结构来表示一个无限循环
    2022-03-03
  • C++ COM编程之什么是组件?

    C++ COM编程之什么是组件?

    这篇文章主要介绍了COM编程之什么是组件?COM组件是以Win32动态链接库(DLLs)或可执行文件(EXEs)的形式发布的可执行代码,需要的朋友可以参考下
    2014-10-10

最新评论