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

下標(biāo)操作符重載模擬多維數(shù)組詳解

 更新時(shí)間:2013年09月17日 09:58:49   作者:  
雖然不能直接實(shí)現(xiàn)一對(duì)下標(biāo)操作符重載,但是我們可以間接模擬。思路是這樣的,先通過單下標(biāo)操作返回一個(gè)具有下標(biāo)操作能力的左值,對(duì)左值進(jìn)行下標(biāo)操作,兩個(gè)下標(biāo)操作表達(dá)式聯(lián)立就實(shí)現(xiàn)了雙下標(biāo)操作

最近在寫游戲,就以地圖類模版為例說明如何模擬多維數(shù)組吧!

復(fù)制代碼 代碼如下:

    template <typename T_CELL_STYLE>
    class CMap
    {
    public:
        CMap(IN UINT row_num, IN UINT col_num,
                  IN T_CELL_STYLE cell_style = static_cast<T_CELL_STYLE>(0));

        // 下標(biāo)操作符重載
        typename vector<T_CELL_STYLE>::iterator operator[](IN UINT x);

    public:
        const UINT m_ROW_NUM;    // 地圖網(wǎng)格行數(shù)
        const UINT m_COL_NUM;    // 地圖網(wǎng)格列數(shù)
    private:
        vector<T_CELL_STYLE> _m_map_data;    // 存放地圖數(shù)據(jù)

    }; /* class CMap */


我們知道下標(biāo)操作符重載不能編寫成如下形式:
T_CELL_STYLE operator[][](IN UINT x, IN UINT y);

雖然不能直接實(shí)現(xiàn)一對(duì)下標(biāo)操作符重載,但是我們可以間接模擬。

思路是這樣的,先通過單下標(biāo)操作返回一個(gè)具有下標(biāo)操作能力的左值,對(duì)左值進(jìn)行下標(biāo)操作,兩個(gè)下標(biāo)操作表達(dá)式聯(lián)立就實(shí)現(xiàn)了雙下標(biāo)操作。先看如下示例:

復(fù)制代碼 代碼如下:

    // 地圖尺寸
    #define _MAP_ROW   30
    #define _MAP_COL    36
    // 地圖單元格樣式
    typedef enum {
        _CELL_GROUND,
        _CELL_GRASS,
        _CELL_BRICK,
        _CELL_STEEL,
        _CELL_WATER
    } CELLSTYLE;

    CMap<CELLSTYLE> myMap(_MAP_ROW, _MAP_COL, _CELL_GROUND);
    // 獲取地圖第3行第5列單元格樣式
    vector<T_CELL_STYLE>::iterator iter = myMap[3];
    CELLSTYLE aCell = iter[5];

我們將上面兩個(gè)下標(biāo)操作表達(dá)式聯(lián)立,如下:
CELLSTYLE aCell myMap[3][5];

這樣就得到了雙下標(biāo)操作,看起來就像操作二維數(shù)組。好了,讓我們來看一下如何重載。

復(fù)制代碼 代碼如下:

    template <typename T_CELL_STYLE>
    inline typename vector<T_CELL_STYLE>::iterator
    CMap<T_CELL_STYLE>::operator[](IN UINT x)
    {
        if (m_ROW_NUM <= x)
        {
            overflow_error e("overflow - CMap<T_CELL_STYLE>::operator[]");
            throw(e);
        }
        return _m_map_data.begin() + x * m_COL_NUM;
    }

看到了吧,是不是很簡單,中間過程借用了一個(gè)具有下標(biāo)操作能力的類類型成員。

相關(guān)文章

  • C++數(shù)據(jù)結(jié)構(gòu)之單鏈表

    C++數(shù)據(jù)結(jié)構(gòu)之單鏈表

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)鏈結(jié)成的。結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來存儲(chǔ)數(shù)據(jù)元素的信息,指針域用來存儲(chǔ)下一個(gè)結(jié)點(diǎn)的地址,更詳細(xì)內(nèi)容請(qǐng)需要的小伙伴參考下面文章內(nèi)容
    2022-01-01
  • 解析VC中預(yù)編譯頭文件的深入分析

    解析VC中預(yù)編譯頭文件的深入分析

    本篇文章是對(duì)VC中預(yù)編譯頭文件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • OpenCV實(shí)現(xiàn)直線檢測并消除

    OpenCV實(shí)現(xiàn)直線檢測并消除

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)直線檢測并消除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 基于QT5實(shí)現(xiàn)一個(gè)時(shí)鐘桌面

    基于QT5實(shí)現(xiàn)一個(gè)時(shí)鐘桌面

    這篇文章主要介紹了利用QT5實(shí)現(xiàn)的一個(gè)時(shí)鐘桌面,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以了解一下
    2022-01-01
  • C++基礎(chǔ)概念講述

    C++基礎(chǔ)概念講述

    這篇文章主要介紹了C++基礎(chǔ)概念,??本次為C++的一個(gè)開篇,重點(diǎn)是更好的理解C++相對(duì)于其他編程語言的一個(gè)特性,之后會(huì)持續(xù)更新,本次專欄計(jì)劃是掌握C++的基礎(chǔ)語法以及常用特性,并且從細(xì)節(jié)上去理解,需要的朋友可以參考一下
    2021-12-12
  • Qt自定義圖形實(shí)現(xiàn)拖拽效果

    Qt自定義圖形實(shí)現(xiàn)拖拽效果

    這篇文章主要為大家詳細(xì)介紹了Qt自定義圖形實(shí)現(xiàn)拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++中的static和const的關(guān)鍵字用法詳解

    C++中的static和const的關(guān)鍵字用法詳解

    這篇文章主要介紹了C++中的static和const的關(guān)鍵字用法詳解,這是一道經(jīng)常在面試中被問到的知識(shí),本文給大家詳細(xì)介紹下,需要的朋友可以參考下
    2023-06-06
  • 關(guān)于Visual Studio無法打開源文件

    關(guān)于Visual Studio無法打開源文件"stdio.h"問題

    這篇文章主要介紹了關(guān)于Visual Studio無法打開源文件"stdio.h"問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • C語言實(shí)現(xiàn)折半查找法(二分法)

    C語言實(shí)現(xiàn)折半查找法(二分法)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)折半查找法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++ Primer 多維數(shù)組的使用

    C++ Primer 多維數(shù)組的使用

    本文主要介紹了多維數(shù)組在C++語言中的定義、初始化、下標(biāo)引用以及使用范圍for語句處理多維數(shù)組的方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02

最新評(píng)論

五大连池市| 清徐县| 盐池县| 克什克腾旗| 吉林省| 墨脱县| 宁海县| 乳源| 区。| 咸阳市| 大庆市| 合水县| 清苑县| 黄平县| 辽宁省| 天祝| 色达县| 石首市| 鄂伦春自治旗| 南部县| 孙吴县| 仲巴县| 获嘉县| 塘沽区| 高阳县| 华安县| 义马市| 吐鲁番市| 子洲县| 磐石市| 特克斯县| 寿光市| 房山区| 收藏| 宝丰县| 龙江县| 修水县| 元谋县| 闽清县| 崇信县| 监利县|