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

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

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

最近在寫游戲,就以地圖類模版為例說明如何模擬多維數(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));

        // 下標操作符重載
        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 */


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

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

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

復(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];

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

這樣就得到了雙下標操作,看起來就像操作二維數(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;
    }

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

相關(guān)文章

  • 詳解C/C++中new?A與new?A()的區(qū)別

    詳解C/C++中new?A與new?A()的區(qū)別

    這篇文章主要通過一些簡單的示例為大家詳細介紹一下C/C++中new?A與new?A()的區(qū)別,文中的示例代碼簡潔易懂,快跟隨小編一起學(xué)習起來吧
    2023-07-07
  • C++函數(shù)參數(shù)匹配規(guī)則示例小結(jié)

    C++函數(shù)參數(shù)匹配規(guī)則示例小結(jié)

    這篇文章主要介紹了C++函數(shù)參數(shù)匹配規(guī)則,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 一篇文章帶你了解C語言文件操作中的幾個函數(shù)

    一篇文章帶你了解C語言文件操作中的幾個函數(shù)

    這篇文章主要介紹了使用C語言操作文件的基本函數(shù)整理,包括創(chuàng)建和打開以及關(guān)閉文件的操作方法,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • C語言數(shù)據(jù)結(jié)構(gòu) 棧的基礎(chǔ)操作

    C語言數(shù)據(jù)結(jié)構(gòu) 棧的基礎(chǔ)操作

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu) 棧的基礎(chǔ)操作的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++利用鏈表寫一個簡單的棧實例詳解

    C++利用鏈表寫一個簡單的棧實例詳解

    這篇文章主要介紹了C++利用鏈表寫一個簡單的棧實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++實現(xiàn)選擇性排序(SelectionSort)

    C++實現(xiàn)選擇性排序(SelectionSort)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)選擇性排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言實現(xiàn)學(xué)生打卡系統(tǒng)

    C語言實現(xiàn)學(xué)生打卡系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生打卡系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C與C++中結(jié)構(gòu)體的區(qū)別

    C與C++中結(jié)構(gòu)體的區(qū)別

    C中的結(jié)構(gòu)體只涉及到數(shù)據(jù)結(jié)構(gòu),而不涉及到算法,也就是說在C中數(shù)據(jù)結(jié)構(gòu)和算法是分離的,而到C++中一類或者一個結(jié)構(gòu)體可以包含函數(shù)(這個函數(shù)在C++我們通常中稱為成員函數(shù)),C++中的結(jié)構(gòu)體和類體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)和算法的結(jié)合
    2013-10-10
  • C語言實現(xiàn)設(shè)備管理系統(tǒng)

    C語言實現(xiàn)設(shè)備管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)設(shè)備管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 基于C++自動化編譯工具的使用詳解

    基于C++自動化編譯工具的使用詳解

    本篇文章是對C++中自動化編譯工具的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論