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

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

 更新時間:2013年09月17日 09:58:49   作者:  
雖然不能直接實(shí)現(xiàn)一對下標(biāo)操作符重載,但是我們可以間接模擬。思路是這樣的,先通過單下標(biāo)操作返回一個具有下標(biāo)操作能力的左值,對左值進(jìn)行下標(biāo)操作,兩個下標(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)一對下標(biāo)操作符重載,但是我們可以間接模擬。

思路是這樣的,先通過單下標(biāo)操作返回一個具有下標(biāo)操作能力的左值,對左值進(jìn)行下標(biāo)操作,兩個下標(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];

我們將上面兩個下標(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;
    }

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

庆阳市| 安远县| 吴江市| 伊川县| 瑞安市| 侯马市| 台南县| 安阳市| 富川| 新田县| 泽州县| 金乡县| 柳林县| 寻乌县| 项城市| 阳春市| 华池县| 长阳| 瑞金市| 凤阳县| 嵊泗县| 双城市| 棋牌| 米脂县| 会理县| 临漳县| 弥勒县| 昌宁县| 安丘市| 潞城市| 彰化市| 衡山县| 永定县| 盖州市| 吴川市| 南昌县| 凯里市| 土默特左旗| 石楼县| 武城县| 务川|