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

c++ 前自增/后自增操作符效率分析

 更新時間:2021年01月07日 09:32:03   作者:xhubobo  
這篇文章主要介紹了c++ 前自增/后自增操作符效率分析,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下

1、前自增/后自增操作符示例

class Integer
{
public:
    // ++i  first +1,then return new value
    Integer &operator++()
    {
        value_ += 1;
        return *this;
    }
 
    // i++  first save old value,then +1,last return old value
    Integer operator++(int)
    {
        Integer old = *this;
        value_ += 1;
        return old;
    }
 
private:
    int value_;
};

2、分別基于內(nèi)置數(shù)據(jù)類型和自定義數(shù)據(jù)類型做測試

#include <iostream>
#include <vector>
#include <windows.h>
 
int main()
{
    const int sizeInt = 0x00fffffe;
    const int sizeVec = 0x000ffffe;
 
    LARGE_INTEGER frequency;
    QueryPerformanceFrequency(&frequency);
 
    {
        int* testValue = new int[sizeInt];
 
        LARGE_INTEGER start;
        LARGE_INTEGER stop;
        QueryPerformanceCounter(&start);
        for (int i = 0; i < sizeInt; ++i)
        {
            testValue[i]++;
        }
        QueryPerformanceCounter(&stop);    
 
        const auto interval = static_cast<double>(stop.QuadPart - start.QuadPart);
        const auto timeSpan = interval / frequency.QuadPart * 1000.0; //ms
        std::cout << "i++ " << sizeInt << " times takes " << timeSpan << "ms." << std::endl;
 
        delete[] testValue;
    }
    {
        int* testValue = new int[sizeInt];
 
        LARGE_INTEGER start;
        LARGE_INTEGER stop;
        QueryPerformanceCounter(&start);
        for (int i = 0; i < sizeInt; ++i)
        {
            ++testValue[i];
        }
        QueryPerformanceCounter(&stop);    
 
        const auto interval = static_cast<double>(stop.QuadPart - start.QuadPart);
        const auto timeSpan = interval / frequency.QuadPart * 1000.0; //ms
        std::cout << "++i " << sizeInt << " times takes " << timeSpan << "ms." << std::endl;
 
        delete[] testValue;
    }
 
    {
        const std::vector<int> testVec(sizeVec);
        LARGE_INTEGER start;
        LARGE_INTEGER stop;
        QueryPerformanceCounter(&start);
        for (auto iter = testVec.cbegin(); iter != testVec.cend(); iter++)
        {
        }
        QueryPerformanceCounter(&stop);
 
        const auto interval = static_cast<double>(stop.QuadPart - start.QuadPart);
        const auto timeSpan = interval / frequency.QuadPart * 1000.0; //ms
        std::cout << "iterator++ " << sizeVec << " times takes " << timeSpan << "ms." << std::endl;
    }
    {
        const std::vector<int> testVec(sizeVec);
        LARGE_INTEGER start;
        LARGE_INTEGER stop;
        QueryPerformanceCounter(&start);
        for (auto iter = testVec.cbegin(); iter != testVec.cend(); ++iter)
        {
        }
        QueryPerformanceCounter(&stop);
 
        const auto interval = static_cast<double>(stop.QuadPart - start.QuadPart);
        const auto timeSpan = interval / frequency.QuadPart * 1000.0; //ms
        std::cout << "++iterator " << sizeVec << " times takes " << timeSpan << "ms." << std::endl;
    }
 
    return 0;
}

3、五次執(zhí)行結(jié)果

4、結(jié)果分析及結(jié)論

從上面的執(zhí)行結(jié)果可以看出來,對int類型的測試中前自增和后自增耗費時間基本不變;而對std::vector中iterator的測試顯示,前自增所耗費的時間幾乎是后自增的一半。這是因為,在后自增的操作中,會首先生成原始對象的一個副本,然后將副本中的值加1后返回給調(diào)用者,這樣一來每執(zhí)行一次后自增操作,就會增加一個對象副本,效率自然降低了。

因此可以得出結(jié)論:對于C++內(nèi)置類型的自增而言,前自增、后自增的效率相差不大;對于自定義類型(類、結(jié)構(gòu)體)的自增操作而言,前自增的效率幾乎比后自增大一倍。

5、注意事項

上述試驗的循環(huán)代碼如果在Release模式下會被C++編譯器優(yōu)化掉,因此需要在Debug模式下才能獲得預(yù)期效果,但在實際項目中大概率是不會被編譯器優(yōu)化的。

以上就是c++ 前自增/后自增操作符效率分析的詳細(xì)內(nèi)容,更多關(guān)于c++ 前自增/后自增操作符的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實現(xiàn)動態(tài)數(shù)組功能

    C++實現(xiàn)動態(tài)數(shù)組功能

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)動態(tài)數(shù)組功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C++實現(xiàn)LeetCode(66.加一運算)

    C++實現(xiàn)LeetCode(66.加一運算)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(66.加一運算),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)猜數(shù)字

    C語言實現(xiàn)猜數(shù)字

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • c語言實現(xiàn)整蠱朋友小程序(附源碼)

    c語言實現(xiàn)整蠱朋友小程序(附源碼)

    這篇文章主要給大家介紹了關(guān)于c語言實現(xiàn)整蠱朋友小程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C 與 C++ 接口函數(shù)相互調(diào)用的實現(xiàn)

    C 與 C++ 接口函數(shù)相互調(diào)用的實現(xiàn)

    這篇文章主要介紹了C 與 C++ 接口函數(shù)相互調(diào)用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C++實現(xiàn)簡單推箱子小游戲

    C++實現(xiàn)簡單推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡單推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++ AVLTree高度平衡的二叉搜索樹深入分析

    C++ AVLTree高度平衡的二叉搜索樹深入分析

    這篇文章主要介紹了C++ AVLTree高度平衡的二叉搜索樹,二叉搜索樹雖可以縮短查找的效率,但如果數(shù)據(jù)有序或接近有序二叉搜索樹將退化為單支樹,查找元素相當(dāng)于在順序表中搜索元素,效率低下
    2023-03-03
  • C++中char[]能修改char*卻不行

    C++中char[]能修改char*卻不行

    本文主要介紹了C++中char[]能修改char*卻不行,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 基于linux下獲取時間函數(shù)的詳解

    基于linux下獲取時間函數(shù)的詳解

    本篇文章是對linux下獲取時間的函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++中explicit與mutable關(guān)鍵字的深入探究

    c++中explicit與mutable關(guān)鍵字的深入探究

    這篇文章主要給大家介紹了關(guān)于c++中explicit與mutable關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論

金秀| 罗定市| 芒康县| 南川市| 正阳县| 合川市| 淮北市| 宜春市| 惠东县| 皋兰县| 疏勒县| 庆阳市| 岚皋县| 理塘县| 兴城市| 拜城县| 绵竹市| 科尔| 东兰县| 阿拉善盟| 惠来县| 凤冈县| 宜城市| 交口县| 乐都县| 六枝特区| 开鲁县| 大姚县| 都匀市| 连山| 买车| 河北省| 宁武县| 石渠县| 民权县| 湘阴县| 安乡县| 论坛| 原阳县| 遵义市| 治多县|