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

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

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

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

面試官:array熟悉嗎?

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

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

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

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

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

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

二師兄:(這也太***鉆了吧。。)空數(shù)組的長度應(yīng)該是0,但是長度為0的std::array對象的長度是1,因為它是空類。

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

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

面試官:你覺得arrayvector的性能哪個好?

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

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

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

#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實現(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ù)類型自動推斷特性,實現(xiàn)了類似于泛型的效果。arr可以是任何實現(xiàn)了constexpr opearator<函數(shù)的類型。

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

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

相關(guān)文章

  • C語言實現(xiàn)密碼本小項目

    C語言實現(xiàn)密碼本小項目

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

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

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

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

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

    C語言實現(xiàn)動態(tài)版通訊錄的示例代碼

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

    mfc入門教程之通過控制變量制作計算器

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

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

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

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

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

    C語言全排列回溯算法介紹

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

    c++快速排序詳解

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

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

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

最新評論