亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

面試官:array熟悉嗎?

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

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

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

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

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

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

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

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

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

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

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

面試官:好的。你剛才說(shuō)array能在編譯時(shí)候確定需要在棧上開(kāi)辟的空間,請(qǐng)問(wèn)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)編譯期排序,沒(méi)問(wèn)題吧?

二師兄:(終于,該來(lái)的還是來(lái)了?。┪覈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ù)類(lèi)型自動(dòng)推斷特性,實(shí)現(xiàn)了類(lèi)似于泛型的效果。arr可以是任何實(shí)現(xiàn)了constexpr opearator<函數(shù)的類(lèi)型。

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

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

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 使用ShellClass獲取文件屬性詳細(xì)信息的實(shí)現(xiàn)方法

    使用ShellClass獲取文件屬性詳細(xì)信息的實(shí)現(xiàn)方法

    本篇文章是對(duì)ShellClass獲取文件屬性詳細(xì)信息的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • OpenCV+Qt實(shí)現(xiàn)圖像處理操作

    OpenCV+Qt實(shí)現(xiàn)圖像處理操作

    這篇文章主要為大家詳細(xì)介紹了OpenCV+Qt實(shí)現(xiàn)圖像處理操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)版通訊錄的示例代碼

    C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)版通訊錄的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)態(tài)版通訊錄,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下
    2022-08-08
  • mfc入門(mén)教程之通過(guò)控制變量制作計(jì)算器

    mfc入門(mén)教程之通過(guò)控制變量制作計(jì)算器

    這篇文章主要介紹了mfc入門(mén)教程之通過(guò)控制變量制作計(jì)算器,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • c++使用單例模式實(shí)現(xiàn)命名空間函數(shù)案例詳解

    c++使用單例模式實(shí)現(xiàn)命名空間函數(shù)案例詳解

    這篇文章主要介紹了c++使用單例模式實(shí)現(xiàn)命名空間函數(shù),本案例實(shí)現(xiàn)一個(gè)test命名空間,此命名空間內(nèi)有兩個(gè)函數(shù),分別為getName()和getNameSpace(),本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • C++實(shí)現(xiàn)AVL樹(shù)的示例詳解

    C++實(shí)現(xiàn)AVL樹(shù)的示例詳解

    AVL Tree 是一個(gè)「加上了額外平衡條件」的二叉搜索樹(shù),其平衡條件的建立是為了確保整棵樹(shù)的深度為O(log_2N),本文主要介紹了AVL樹(shù)的實(shí)現(xiàn),需要的可以參考一下
    2023-03-03
  • C語(yǔ)言全排列回溯算法介紹

    C語(yǔ)言全排列回溯算法介紹

    大家好,本篇文章主要講的是C語(yǔ)言全排列回溯算法介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • c++快速排序詳解

    c++快速排序詳解

    快速排序總體思想:先找到一個(gè)樞軸,讓他作為分水嶺,通過(guò)一趟排序?qū)⒋判虻挠涗浄指畛蓛刹糠?前面一部分都比樞軸小,后面一部分樞軸大,然后又分別對(duì)這兩部分記錄繼續(xù)進(jìn)行遞歸的排序,達(dá)到整個(gè)序列有序的目的
    2017-05-05
  • C++三體星戰(zhàn)小游戲源代碼

    C++三體星戰(zhàn)小游戲源代碼

    這篇文章主要給大家介紹了關(guān)于C++三體星戰(zhàn)小游戲的相關(guān)資料,文中給出了詳細(xì)完整的代碼示例,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08

最新評(píng)論