最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?std::array實(shí)現(xiàn)編譯器排序

 更新時(shí)間:2023年06月26日 08:45:22   作者:binarch  
這篇文章主要介紹了C++?std::array實(shí)現(xiàn)編譯器排序,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

面試官:array熟悉嗎?

二師兄:你說的是原生數(shù)組還是std::array?

面試官:你覺得兩者有什么區(qū)別?

二師兄:區(qū)別不是很大,原生數(shù)組(非動(dòng)態(tài)數(shù)組)和std::array都在棧上開辟空間,初始化的時(shí)候需要提供數(shù)組長度,且長度不可改變。有一點(diǎn)區(qū)別的是,std::array提供了安全的下標(biāo)訪問方法at,當(dāng)下標(biāo)越界時(shí)會(huì)拋出異常。

面試官:還有其他區(qū)別嗎?

二師兄:讓我想想。。。在當(dāng)作參數(shù)傳遞時(shí),原生數(shù)組會(huì)退化為指針,而std::array會(huì)保留類型和長度信息。

面試官:好的。知道空數(shù)組的長度和長度為0的std::array對(duì)象有什么區(qū)別嗎?

二師兄:(這也太***鉆了吧。。)空數(shù)組的長度應(yīng)該是0,但是長度為0的std::array對(duì)象的長度是1,因?yàn)樗强疹悺?/p>

面試官:如果一個(gè)類型的拷貝構(gòu)造函數(shù)和拷貝賦值運(yùn)算符是被刪除的,可以使用std::array存儲(chǔ)它嗎?

二師兄:當(dāng)然可以。只是不能傳遞這個(gè)std::array對(duì)象,而只能傳遞這個(gè)對(duì)象的引用或指針。

面試官:你覺得arrayvector的性能哪個(gè)好?

二師兄:array的性能更好,array的內(nèi)存分配在棧上,編譯時(shí)候確定需要在棧上開辟的空間。vector的元素存在堆上,需要開辟和釋放堆內(nèi)存。但vector更靈活,如果能提前確定數(shù)據(jù)量,使用reserve函數(shù)一次性開辟空間,性能和array沒有太大的差距。

面試官:好的。你剛才說array能在編譯時(shí)候確定需要在棧上開辟的空間,請(qǐng)問array在編譯時(shí)還能夠做些什么?

二師兄:比如給定一個(gè)array,我們可以在編譯時(shí)求它所以元素的和。

#include <iostream>
#include <array>
constexpr int sum(auto arr)
{
    int res = 0;
    for (size_t i = 0; i < arr.size(); i++) res += arr[i];
    return res;
}
int main(int argc, char const *argv[])
{
    constexpr std::array arr = {1,2,3,4,5,6,7,8,9};
    constexpr int res = sum(arr);
    std::cout << res << std::endl;
    return 0;
}
//g++ test.cpp -std=c++20 

面試官:好的,使用array實(shí)現(xiàn)編譯期排序,沒問題吧?

二師兄:(終于,該來的還是來了?。┪覈L試一下:

#include <iostream>
#include <array>
constexpr auto sort(auto arr)
{
    for ( int i = 0; i < arr.size() -1; i++)
    {
        for ( int j = 0; j < arr.size() - i -1; j++)
        {
            if (arr[j] < arr[j + 1])
            {
                auto tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    return arr;
}
int main(int argc, char const *argv[])
{
    constexpr std::array arr {10.5, 28.6, 4.4, 23.8, 12.4, 3.8, 19.7, 17.5, 19.1, 0.6, 1.9, 1.5, 25.4, 5.4};
    constexpr auto arr2 = sort(arr);
    for (size_t i = 0; i < arr2.size(); i++)
    {
        std::cout << arr2[i] << std::endl;
    }
    return 0;
}
//g++ test2.cpp -std=c++20

二師兄:使用了C++20的auto參數(shù)類型自動(dòng)推斷特性,實(shí)現(xiàn)了類似于泛型的效果。arr可以是任何實(shí)現(xiàn)了constexpr opearator<函數(shù)的類型。

面試官:好的,不錯(cuò),回去等通知吧。

到此這篇關(guān)于C++ std::array實(shí)現(xiàn)編譯器排序的文章就介紹到這了,更多相關(guān)C++ std::array編譯器排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中將string類型轉(zhuǎn)化為int類型

    C++中將string類型轉(zhuǎn)化為int類型

    本文主要介紹了C++中將string類型轉(zhuǎn)化為int類型的方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • C語言實(shí)現(xiàn)輸出平均成績最高學(xué)生的信息

    C語言實(shí)現(xiàn)輸出平均成績最高學(xué)生的信息

    這篇文章主要介紹利用C語言實(shí)現(xiàn)輸出平均成績最高學(xué)生的信息,文章舉例說明并附有詳細(xì)代碼,需要的朋友可以參考一下
    2021-10-10
  • C++之std命名空間

    C++之std命名空間

    這篇文章主要介紹了C++之std命名空間使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++線程之thread詳解

    C++線程之thread詳解

    這篇文章主要為大家詳細(xì)介紹了C++線程中的thread,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++?棧和隊(duì)列的實(shí)現(xiàn)超詳細(xì)解析

    C++?棧和隊(duì)列的實(shí)現(xiàn)超詳細(xì)解析

    棧和隊(duì)列,嚴(yán)格意義上來說,也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯?chǔ)邏輯關(guān)系為?"一對(duì)一"?的數(shù)據(jù),但由于它們比較特殊,因此將其單獨(dú)作為一章,做重點(diǎn)講解
    2022-03-03
  • C++ OpenCV讀寫XML或YAML文件的方法詳解

    C++ OpenCV讀寫XML或YAML文件的方法詳解

    XML是一種元標(biāo)記語言。所謂元標(biāo)記,就是開發(fā)者可以根據(jù)自身需要定義自己的標(biāo)記。YAML是一個(gè)可讀性高,用來表達(dá)資料序列的格式。本文將通過C++和OpenCV實(shí)現(xiàn)這兩種文件的讀寫,需要的可以參考一下
    2022-05-05
  • 基于QT5的文件讀取程序的實(shí)現(xiàn)

    基于QT5的文件讀取程序的實(shí)現(xiàn)

    本文主要介紹了基于QT5的文件讀取程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C語言簡明講解隊(duì)列的實(shí)現(xiàn)方法

    C語言簡明講解隊(duì)列的實(shí)現(xiàn)方法

    隊(duì)列(Queue)與棧一樣,是一種線性存儲(chǔ)結(jié)構(gòu),它具有如下特點(diǎn):隊(duì)列中的數(shù)據(jù)元素遵循“先進(jìn)先出”(First?In?First?Out)的原則,簡稱FIFO結(jié)構(gòu)。在隊(duì)尾添加元素,在隊(duì)頭刪除元素
    2022-04-04
  • C++自旋鎖的實(shí)現(xiàn)示例

    C++自旋鎖的實(shí)現(xiàn)示例

    自旋鎖是一種非阻塞鎖,線程在獲取鎖失敗時(shí)會(huì)忙等待而不是掛起,它適用于鎖持有時(shí)間極短的場景,可以在用戶態(tài)運(yùn)行,避免系統(tǒng)調(diào)用開銷,下面就來詳細(xì)的介紹一下C++自旋鎖的使用,感興趣的可以了解一下
    2026-02-02
  • 解析C/C++指針、函數(shù)、結(jié)構(gòu)體、共用體

    解析C/C++指針、函數(shù)、結(jié)構(gòu)體、共用體

    這篇文章主要介紹了C/C++指針、函數(shù)、結(jié)構(gòu)體、共用體的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01

最新評(píng)論

阿鲁科尔沁旗| 喀什市| 宁波市| 青铜峡市| 凌云县| 万安县| 分宜县| 高碑店市| 宜兴市| 集安市| 自治县| 福建省| 额尔古纳市| 彭州市| 同仁县| 保定市| 礼泉县| 富裕县| 海丰县| 青铜峡市| 三江| 天峻县| 湘西| 北宁市| 万州区| 溧水县| 临江市| 团风县| 沂南县| 金华市| 泰和县| 富阳市| 奉化市| 吉林市| 樟树市| 泽州县| 鄂伦春自治旗| 云林县| 长宁县| 夏津县| 神池县|