国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++面試八股文:std::vector了解嗎?

這篇具有很好參考價值的文章主要介紹了C++面試八股文:std::vector了解嗎?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

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

面試官:vector了解嗎?

二師兄:嗯,用過。

面試官:那你知道vector底層是如何實(shí)現(xiàn)的嗎?

二師兄:vector底層使用動態(tài)數(shù)組來存儲元素對象,同時使用sizecapacity記錄當(dāng)前元素的數(shù)量和當(dāng)前動態(tài)數(shù)組的容量。如果持續(xù)的push_back(emplace_back)元素,當(dāng)size大于capacity時,需要開辟一塊更大的動態(tài)數(shù)組,并把舊動態(tài)數(shù)組上的元素搬移到當(dāng)前動態(tài)數(shù)組,然后銷毀舊的動態(tài)數(shù)組。

面試官:你知道新開辟的動態(tài)數(shù)組的容量是就數(shù)組的多少倍比較合適?

二師兄:這個值在不同的編譯器上不是固定的。MSVC 是1.5,而GCC是2。

面試官:有沒有什么好的辦法提升vector連續(xù)插入效率?

二師兄:有的,如果知道數(shù)據(jù)的大概量,我們可以使用reserve方法直接為vector擴(kuò)容這個量級。這樣在后續(xù)的數(shù)據(jù)插入時就不會因?yàn)轭l繁的capacity被用盡而導(dǎo)致的多次的數(shù)據(jù)搬移,從而提升vector插入效率。

面試官:push_backemplace_back有什么區(qū)別?

二師兄:兩者都可以在容器尾部插入元素。在GCC中,如果插入的元素是右值,兩者都會move元素到容器。如果是左值,兩者都會copy元素到容器。唯一不同的一點(diǎn)是,當(dāng)C++版本高于C++17時,emplace_back返回當(dāng)前插入的值的引用,而push_back返回void。

面試官:eraseremove有什么區(qū)別?

二師兄:erase屬于成員函數(shù),erase刪除了元素,remove屬于算法庫函數(shù),而remove只會把元素移動到尾部。

面試官:哪些情況下迭代器會失效?

二師兄:迭代器失效主要有兩種情況引起:1.插入數(shù)據(jù)。由于插入數(shù)據(jù)可能導(dǎo)致數(shù)據(jù)搬移(size > capacity),所以迭代器失效。2.刪除數(shù)據(jù)。當(dāng)使用erase刪除數(shù)據(jù)時,被刪除數(shù)據(jù)后面的數(shù)據(jù)依次向前移一位。這會導(dǎo)致被刪除數(shù)據(jù)之后的迭代器失效。

面試官:如何快速的清空vector容器并釋放vector容器所占用的內(nèi)存?

二師兄:有兩種方法:第一種,使用clear方法清空所有元素。然后使用shrink_to_fit方法把capacitysize(0)對齊,達(dá)到釋放內(nèi)存的作用:

#include <iostream>
#include <vector>
int main(int argc, char const *argv[])
{
    std::vector<int> vi;
    vi.reserve(1024);
    for (int i = 0; i < 1024; i++) vi.push_back(i);
    std::cout << vi.size() << " " << vi.capacity() << std::endl;    //1024 1024
    vi.clear(); 
    std::cout << vi.size() << " " << vi.capacity() << std::endl;    //0 1024
    vi.shrink_to_fit(); 
    std::cout << vi.size() << " " << vi.capacity() << std::endl;    //0 0
}

二師兄:第二種,使用swap方法;

#include <iostream>
#include <vector>
int main(int argc, char const *argv[])
{
    std::vector<int> vi;
    vi.reserve(1024);
    for (int i = 0; i < 1024; i++) vi.push_back(i);
    std::cout << vi.size() << " " << vi.capacity() << std::endl;    //1024 1024
    std::vector<int>().swap(vi); //使用臨時量(size =0, capacity=0)和vi交換,臨時量會立即析構(gòu)
    std::cout << vi.size() << " " << vi.capacity() << std::endl;    //0 0
}

面試官:你知道vector<bool>是如何實(shí)現(xiàn)的嗎?

二師兄:vector<bool>的實(shí)現(xiàn)和其他實(shí)現(xiàn)容器的實(shí)現(xiàn)不一致。每個元素被當(dāng)作一個位而不是一個字節(jié)存儲。這導(dǎo)致我們不能直接訪問該元素,也無法對每個元素取地址(8個元素可能在同一個字節(jié)中存儲)。所以不建議使用vector<bool>,必要時可以使用std::bitset替代。

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

今天二師兄表現(xiàn)不錯,同時要感謝小伙伴的耐心閱讀。讓我們一起期待明天二師兄的面試之旅吧。

關(guān)注我,帶你21天“精通”C++?。ü奉^)文章來源地址http://www.zghlxwxcb.cn/news/detail-497242.html

到了這里,關(guān)于C++面試八股文:std::vector了解嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++面試八股文:std::array如何實(shí)現(xiàn)編譯器排序?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第25面: 面試官: array 熟悉嗎? 二師兄:你說的是原生數(shù)組還是 std::array ? 面試官:你覺得兩者有什么區(qū)別? 二師兄:區(qū)別不是很大,原生數(shù)組(非動態(tài)數(shù)組)和std::array都在棧上開辟空間,初始化的時候需要提供數(shù)組長度,且

    2024年02月10日
    瀏覽(26)
  • C++面試八股文:知道std::unordered_set/std::unordered_map嗎?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第27面: 面試官:知道 std::unordered_set/std::unordered_map 嗎? 二師兄:知道。兩者都是C++11引入的新容器,和 std::set 和 std::map 功能類似, key 唯一, unordered_map 的 value 可變。 二師兄:不同于 set/map , unordered_set/unordered_map 都是無序

    2024年02月11日
    瀏覽(22)
  • C++面試八股文:了解位運(yùn)算嗎?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第12面: 面試官:了解位運(yùn)算嗎? 二師兄:了解一些。(我很熟悉) 面試官:請列舉以下有哪些位運(yùn)算? 二師兄:按位與( )、按位或( | )、按位異或( ^ ),按位取反( ~ )、左移( )和右移( )。 面試官:好的。那你

    2024年02月08日
    瀏覽(23)
  • C++面試八股文:了解sizeof操作符嗎?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第10面: 面試官:了解 sizeof 操作符嗎? 二師兄:略微了解(不就是求大小的嘛。。) 面試官:請講以下如何使用 sizeof ? 二師兄: sizeof 主要是求變量或者類型的大小。直接使用 sizeof(type) 或 sizeof(var) 即可。 面試官:嗯。 s

    2024年02月08日
    瀏覽(21)
  • C++面試八股文:了解auto關(guān)鍵字嗎?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第15面: 面試官:了解 auto 嗎? 二師兄:嗯,了解一些(我很熟悉)。 面試官:說一說 auto 的用法吧? 二師兄: auto 主要是為了編譯器進(jìn)行類型推導(dǎo)。比如: 二師兄:也可以作為函數(shù)返回類型的占位符: 二師兄:在C

    2024年02月09日
    瀏覽(22)
  • C++面試八股文:static_cast了解一下?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第20面: 面試官:C++中支持哪些類型轉(zhuǎn)換? 二師兄:C++支持C風(fēng)格的類型轉(zhuǎn)換,并在C++11引入新的規(guī)范了類型轉(zhuǎn)換。 二師兄:C++11引入四種新的類型轉(zhuǎn)換,分別是 static_cast 、 dynamic_cast 、 const_cast 、和 reinterpret_cast 。 二師

    2024年02月09日
    瀏覽(25)
  • C++面試八股文:技術(shù)勘誤

    C++面試八股文:技術(shù)勘誤

    不知不覺,《C++面試八股文》已經(jīng)更新30篇了,這是我第一次寫技術(shù)博客,由于個人能力有限,出現(xiàn)了不少紕漏,在此向各位讀者小伙伴們致歉。 為了不誤導(dǎo)更多的小伙伴,以后會不定期的出勘誤文章,請各位小伙伴留意。 在《C++面試八股文:C++中,設(shè)計一個類要注意哪些東

    2024年02月11日
    瀏覽(30)
  • C++面試八股文:如何避免死鎖?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第31面: 面試官:什么是鎖?有什么作用? 二師兄:在C++中,鎖(Lock)是一種同步工具,用于保護(hù)共享資源,防止多個線程同時訪問,從而避免數(shù)據(jù)競爭和不一致。 面試官:有哪些鎖? 二師兄:從種類上分,可以分為普通鎖、

    2024年02月12日
    瀏覽(28)
  • C++面試八股文:什么是智能指針?

    C++面試八股文:什么是智能指針?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第19面: 面試官:什么是智能指針? 二師兄:智能指針是C++11引入的類模板,用于管理資源,行為類似于指針,但不需要手動申請、釋放資源,所以稱為智能指針。 面試官:C++11引入了哪些智能指針? 二師兄:三種,分別是 s

    2024年02月09日
    瀏覽(24)
  • C++面試八股文:聊一聊指針?

    C++面試八股文:聊一聊指針?

    某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第17面: 面試官:聊一聊指針? 二師兄:好的。 面試官:你覺得指針本質(zhì)上是什么? 二師兄:這要從內(nèi)存地址開始說起了。如果有一塊容量是1G的內(nèi)存,假設(shè)它的地址是從 0x00000000 到 0x3fffffff ,每一個字節(jié)都對應(yīng)一個地址。當(dāng)

    2024年02月09日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包