C++面试八股文:用过STL吗?

这篇具有很好参考价值的文章主要介绍了C++面试八股文:用过STL吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

某日二师兄参加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++面试之旅,明天继续。

关注我,带你21天“精通”C++!(狗头)文章来源地址https://www.toymoban.com/news/detail-494283.html

到了这里,关于C++面试八股文:用过STL吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++面试八股文:什么是智能指针?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第19面: 面试官:什么是智能指针? 二师兄:智能指针是C++11引入的类模板,用于管理资源,行为类似于指针,但不需要手动申请、释放资源,所以称为智能指针。 面试官:C++11引入了哪些智能指针? 二师兄:三种,分别是 s

    2024年02月09日
    浏览(44)
  • C++面试八股文:了解位运算吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第12面: 面试官:了解位运算吗? 二师兄:了解一些。(我很熟悉) 面试官:请列举以下有哪些位运算? 二师兄:按位与( )、按位或( | )、按位异或( ^ ),按位取反( ~ )、左移( )和右移( )。 面试官:好的。那你

    2024年02月08日
    浏览(41)
  • C++面试八股文:什么是构造函数?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第29面: 面试官:什么是构造函数? 二师兄:构造函数是一种特殊的成员函数,用于创建和初始化类的对象。构造函数的名称与类的名称相同,并且没有返回类型。构造函数在对象被创建时自动调用。 面试官:什么是默认构造

    2024年02月11日
    浏览(47)
  • C++面试八股文:什么是RAII?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第13面: 面试官:什么是 RAII ? 二师兄: RAII 是 Resource Acquisition Is Initialization 的缩写。翻译成中文是资源获取即初始化。 面试官: RAII 有什么特点和优势? 二师兄:主要的特点是,在对象初始化时获取资源,在对象析构时释放

    2024年02月08日
    浏览(57)
  • C++面试八股文:聊一聊指针?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第17面: 面试官:聊一聊指针? 二师兄:好的。 面试官:你觉得指针本质上是什么? 二师兄:这要从内存地址开始说起了。如果有一块容量是1G的内存,假设它的地址是从 0x00000000 到 0x3fffffff ,每一个字节都对应一个地址。当

    2024年02月09日
    浏览(39)
  • C++面试八股文:如何实现一个strncpy函数?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第31面: 面试官: strcpy 函数使用过吧? 二师兄:用过。 面试官:这个函数有什么作用? 二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。 面试官: strncpy 函数也使用过吧,和 strcpy 有何不同? 二师兄:

    2024年02月11日
    浏览(53)
  • C++面试八股文:std::vector了解吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第23面: 面试官: vector 了解吗? 二师兄:嗯,用过。 面试官:那你知道 vector 底层是如何实现的吗? 二师兄: vector 底层使用动态数组来存储元素对象,同时使用 size 和 capacity 记录当前元素的数量和当前动态数组的容量。如果

    2024年02月10日
    浏览(40)
  • C++面试八股文:在C++中,有哪些可执行体?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第14面: 面试官:在C++中,有哪些可执行体? 二师兄:可执行体? 面试官:也就是可调用对象。 二师兄:让我想一想。函数、函数指针、类的静态方法、类的成员方法、仿函数、lambda表达式。 面试官:能说一说他们之间有什么

    2024年02月08日
    浏览(42)
  • C++面试八股文:了解sizeof操作符吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第10面: 面试官:了解 sizeof 操作符吗? 二师兄:略微了解(不就是求大小的嘛。。) 面试官:请讲以下如何使用 sizeof ? 二师兄: sizeof 主要是求变量或者类型的大小。直接使用 sizeof(type) 或 sizeof(var) 即可。 面试官:嗯。 s

    2024年02月08日
    浏览(37)
  • C++面试八股文:了解auto关键字吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第15面: 面试官:了解 auto 吗? 二师兄:嗯,了解一些(我很熟悉)。 面试官:说一说 auto 的用法吧? 二师兄: auto 主要是为了编译器进行类型推导。比如: 二师兄:也可以作为函数返回类型的占位符: 二师兄:在C

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包