欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解

 更新時間:2023年06月22日 10:50:18   作者:二進(jìn)制架構(gòu)  
這篇文章主要為大家介紹了C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

面試模擬

某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第21面:

面試官:用過STL嗎?

二師兄:(每天都用好嗎。。)用過一些。

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

二師兄:STL是指標(biāo)準(zhǔn)模板庫(Standard Template Library),是C++區(qū)別于C語言的特征之一。

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

二師兄:分別是容器(container)、迭代器(iterator)、適配器(adaptor)、分配器(allocator)、仿函數(shù)(functor)和算法(algorithm)。

面試官:那你知道有哪些容器嗎?

二師兄:STL中容器的數(shù)量比較多,按照類型可以分為順序容器和關(guān)聯(lián)容器。

二師兄:順序容器主要有vector、dequelist、forward_listarray。其中forward_listarray是C++11引入的。

二師兄:關(guān)聯(lián)容器主要有setmap、multiset、multimap、unordered_setunordered_map、unordered_multiset、unordered_multiamp。其中后四種是C++11新引入的。

面試官:好的。那你知道迭代器分為哪些種類嗎?

二師兄:分別是輸入迭代器(Input Iterator)、輸出迭代器(Output Iterator)、前向迭代器(Forward Iterator)、雙向迭代器(Bidirectional Iterator)和隨機(jī)訪問迭代器(Random Access Iterator)。

二師兄:其中輸入和輸出迭代器分別用于讀取和寫入數(shù)據(jù),前向迭代器只能向前訪問而不能向后訪問(forward_list),雙向迭代器既可向前也可向后(list),隨機(jī)訪問迭代器可以通過下標(biāo)訪問任何合法的位置(vector)。

面試官:你知道適配器是做什么的嗎?

二師兄:適配器是一種設(shè)計模式。主要起到將不同的接口統(tǒng)一起來的作用。STL中的容器適配器如stackqueue,通過調(diào)用容器的接口,實現(xiàn)適配器所需的功能。

面試官:有了解過分配器嗎?

二師兄:分配器主要用于內(nèi)存的分配與釋放。一般容器都會自帶默認(rèn)分配器,很少會自己實現(xiàn)分配器。

面試官:有使用分配器做一些內(nèi)存分配的工作嗎?

二師兄:沒有。。。

面試官:知道仿函數(shù)是做什么用的嗎?

二師兄:是一個可執(zhí)行的對象,類型重載了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中常見的算法有哪些?

二師兄:一般分為三類,查找、排序和數(shù)值操作。

二師兄:查找常用的有std::find、std::find_if、std::find_first_of等。

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

二師兄:數(shù)值操作主要用std::accumulate求和。

面試官:那你知道STL六大部件之間的聯(lián)系嗎?

二師兄:(想了想)不是特別清楚。。。

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

讓我們回顧一下二師兄的表現(xiàn):

有使用分配器做一些內(nèi)存分配的工作嗎?

這里主要是問有沒有手寫過分配器:

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運算符用于分配內(nèi)存和釋放內(nèi)存。示例中mallocfree函數(shù)來分配和釋放內(nèi)存,也可以用newdelete。

我們可以在allocatedeallocate中做很多事情,比如我們可以統(tǒng)計申請和釋放內(nèi)存的總量,可以申請一塊大內(nèi)存做內(nèi)存池等等。

知道STL六大部件之間的聯(lián)系嗎?

這個問題比較開放,需要對STL六大部件有一定的理解。首先是分配器,主要是為容器分配管理內(nèi)存的。其次是迭代器,是容器和算法的橋梁。再次是仿函數(shù),一般用作算法中,適配器提供各種粘合劑的功能,把不同部件之間的接口連接起來。

以上就是C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解的詳細(xì)內(nèi)容,更多關(guān)于C++面試STL標(biāo)準(zhǔn)模板庫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++圖文并茂講解類型轉(zhuǎn)換函數(shù)

    C++圖文并茂講解類型轉(zhuǎn)換函數(shù)

    類型轉(zhuǎn)換(type cast),是高級語言的一個基本語法。它被實現(xiàn)為一個特殊的運算符,以小括號內(nèi)加上類型名來表示,接下來讓我們一起來詳細(xì)了解
    2022-05-05
  • JetBrains?CLion永久激活超詳細(xì)教程(最新激活方法)

    JetBrains?CLion永久激活超詳細(xì)教程(最新激活方法)

    JetBrains?Clion?是一款專為?C/C++?開發(fā)所設(shè)計的跨平臺?IDE,本文適用?JetBrains?CLion?v2019.3/3.1/3.2/3.3?永久激活,附破解補(bǔ)丁和激活碼,可以永久激活?Windows、MAC、Linux?下的?CLion,下面給大家分享JetBrains?CLion永久激活超詳細(xì)教程,感興趣的朋友一起看看吧
    2023-01-01
  • C++如何使用new來初始化指向類的指針

    C++如何使用new來初始化指向類的指針

    這篇文章主要介紹了C++如何使用new來初始化指向類的指針問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C++使用cjson操作Json格式文件(創(chuàng)建、插入、解析、修改、刪除)

    C++使用cjson操作Json格式文件(創(chuàng)建、插入、解析、修改、刪除)

    本文主要介紹了C++使用cjson操作Json格式文件(創(chuàng)建、插入、解析、修改、刪除),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++中如何將operator==定義為類的成員函數(shù)

    C++中如何將operator==定義為類的成員函數(shù)

    這篇文章主要介紹了C++中如何將operator==定義為類的成員函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C語言超詳細(xì)講解順序表的各種操作

    C語言超詳細(xì)講解順序表的各種操作

    大家好,今天給大家?guī)淼氖琼樞虮?,我覺得順序表還是有比較難理解的地方的,于是我就把這一塊的內(nèi)容全部整理到了一起,希望能夠給剛剛進(jìn)行學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的人帶來一些幫助,或者是已經(jīng)學(xué)過這塊的朋友們帶來更深的理解,我們現(xiàn)在就開始吧
    2022-05-05
  • c++中冒號(:)和雙冒號(::)的使用說明

    c++中冒號(:)和雙冒號(::)的使用說明

    以下是對c++中冒號和雙冒號的用法進(jìn)行了介紹,需要的朋友可以過來參考下
    2013-07-07
  • C語言實現(xiàn)掃雷游戲小項目

    C語言實現(xiàn)掃雷游戲小項目

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)掃雷游戲小項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境

    詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境

    這篇文章主要介紹了詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 使用OpenGL實現(xiàn)3D立體顯示的程序代碼

    使用OpenGL實現(xiàn)3D立體顯示的程序代碼

    本篇文章是對使用OpenGL實現(xiàn)3D立體顯示的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論