国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

在STL中處理對象指針

在STL中處理對象指針

更新時間:2022-04-28 文章作者:未知 信息來源:網絡 閱讀次數:

眾所周知,STL的容器類是針對對象來進行存儲管理的。雖然沒有明確的限制不能在STL的容
器類中包含指針,STL也不在乎您存放在容器中的對象還是指針。但仔細考慮STL的初衷,
在容器類中使用指針是明顯不合時宜的。
CKER的意思是您應該盡可能的直接將對象本身而不是將對象的指針放置在STL容器類中。直接
在容器中存放指針一個最大的副作用就是可能導致內存泄漏。這個問題在char *類型上有突出
的體現。
但某些時候,直接使用對象指針有明顯的好處,這些情況大致可以概括為如下的幾個方面:
1. 當對象十分龐大時,頻繁的拷貝復制所帶來的系統資源消耗十分昂貴。
2. 當您需要將同一個對象存放到多個容器中,這種情況應該不是很少見的。
3. 當您需要在同一個容器中存放由同一個父類派生而來的多個派生類對象。這也很常見。
事實上,CKER這個星期所開發的計算程序中,正需要面對第三種情況。考慮使用STL的種種好處。
CKER決定引入STL的list容器。

本來,使用BCB的TList對象,也可以實現同樣的目的。

TLsit類在對象指針的個數超過5000個時,效率會有明顯的下降。
TList類不是類型安全的,它根本不在乎引入的對象指針是何種類型的。
引入TList類就意味著要包含VCL.h頭文件,這對我的計算模塊的可移植性實在不是一件好事。

cker做了決定之后,面臨兩個與stl有關的問題。
第一個問題就是上面提到的如何在STL中處理對象的指針。
CKER的解決之道是創建一個封裝指針的類。
代碼如下:

// 定義一個用于STL容器的指針封裝類
// 因為使用STL不宜直接向容器中添加指針。
////////////////////////////////////////////////////////////////////////////////
class PtrWrapper
{
private:
    X* px;//指向類X的指針

public:
    file://構造及拷貝構造函數
    PtrWrapper(X* x = 0) : px(x) {}
    PtrWrapper(const PtrWrapper& pw) : px(pw.px) {}
    file://析構函數
    ~PtrWrapper() {}
    PtrWrapper& operator= (const PtrWrapper& pw) { px = xw.px; }

    file://重載運算符()返回對象X的指針
    const X* operator() () const { return px; }
    X* operator() () { return px; }
};

file://重載邏輯運算符 == , < , >
bool operator== (const PtrWrapper& pw1, const PtrWrapper& pw2) {
    return (pw1.operator()() && pw2.operator()()) ? *pw1() == *pw2() : false;
}

bool operator< (const PtrWrapper& pw1, const PtrWrapper& pw2) {
    return (pw1() && pw2()) ? *pw1() < *pw2() : false;
}

bool operator> (const PtrWrapper& pw1, const PtrWrapper& pw2) {
    return (pw1() && pw2()) ? !(*pw1() < *pw2()) : false;
}


上述代碼封裝了一個指針。經過類PtrWrapper的封裝后,您就沒有必要直接使用指針了。
STL容器接觸的是真正的對象,只不過這個對象封裝了一個特定類型的指針。
下面舉例說明PtrWrapper的使用。


// 假設您需要將指向類X的對象的指針放入STL容器。
//
class X
{
private:
    int I;

public:
    file://構造函數,拷貝構造函數,析構函數
    X(int i) : I(i) {}
    X(const X& x) : I(x.I) {}
    ~X() {}
    file://重載運算符= ,()
    X& operator= (const X& x) { I = x.I; }

    int operator()() const { return I; }
};
file://重載邏輯運算符
bool operator== (const X& x1, const X& x2) {
    return x1() == x2();
}

bool operator< (const X& x1, const X& x2) {
    return x1() < x2();
}




file://下面是示例主程序
int main(int, char*[]) {
    PtrWrapper bucket[5];
    for(int i = 0; i < 5; ++i) {
        bucket[i] = PtrWrapper(new X(i * i));
    }
    random_shuffle(bucket, bucket + 5);

    list<PtrWrapper> list1;
    copy(bucket, bucket + 5,
        back_insert_iterator<list<PtrWrapper> > (list1)
    );

    cout << "List of PtrWrapper: (";
    for_each(list1.begin(), list1.end(), print);
    cout << ")" << endl;

    set<PtrWrapper, greater<PtrWrapper> > set1;
    copy(list1.begin(), list1.end(),
        insert_iterator<set<PtrWrapper, greater<PtrWrapper> > >
            (set1, set1.begin())
    );

    cout << "Set of PtrWrapper : [";
    for_each(set1.begin(), set1.end(), print);
    cout << "]" << endl;

   deque<PtrWrapper> deque1;
    copy(list1.begin(), list1.end(),
        back_insert_iterator<deque<PtrWrapper> > (deque1)
    );

    cout << "Deque of PtrWrapper : (";
    for_each(deque1.begin(), deque1.end(), print);
    cout << ")" << endl;

    return 0;
}

還有一個問題是如何在STL容器種存放派生類對象,下次討論。

注:文中的代碼原型來自于Internet,可惜網址沒留下來。CKER整理之后貼出來,姑且妄稱原創了。

您可以隨意復制、分發、下載此文檔。但未經本人同意,您不可以截取、改動本文片斷,或用本文謀取任何形式的利益。
有任何意見和建議請mailto:cker@sina.com

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        国模娜娜一区二区三区| 精品少妇一区二区三区日产乱码 | 粉嫩在线一区二区三区视频| 色婷婷精品久久二区二区蜜臀av| 国产高清成人在线| 欧美综合一区二区| 4438x成人网最大色成网站| 欧美mv日韩mv亚洲| 久久国产精品第一页| 成人免费看视频| 日韩三级.com| 亚洲欧美日韩精品久久久久| 亚洲成人777| 成人av电影在线观看| 欧美疯狂做受xxxx富婆| 中文字幕不卡的av| 亚洲欧美偷拍三级| 欧美日韩在线不卡| 亚洲婷婷综合久久一本伊一区| 免费观看一级特黄欧美大片| 色综合av在线| 日本 国产 欧美色综合| 久久亚洲精精品中文字幕早川悠里| 一区二区国产盗摄色噜噜| 美女国产一区二区| 欧美色图免费看| 五月天久久比比资源色| 91伊人久久大香线蕉| 国产欧美一区视频| 奇米影视一区二区三区小说| 日韩情涩欧美日韩视频| 成人精品免费看| 午夜激情一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 欧美日韩aaaaaa| 亚洲成国产人片在线观看| 精品日韩成人av| 色综合激情五月| 久久99精品久久久久久久久久久久 | 成人黄色软件下载| 日韩国产成人精品| 欧美一区二区三区免费| 另类人妖一区二区av| 日韩一区欧美小说| 91在线看国产| 亚洲丝袜制服诱惑| 欧美成人vr18sexvr| 欧洲精品视频在线观看| 成人av网址在线| 国产精品一区二区免费不卡 | 色综合久久六月婷婷中文字幕| 麻豆精品一区二区av白丝在线| 一片黄亚洲嫩模| 亚洲天堂中文字幕| 国产精品电影一区二区| 色综合久久66| 不卡电影一区二区三区| 国产精品影音先锋| 国产一区二区三区美女| 成人欧美一区二区三区黑人麻豆| 精品国产91亚洲一区二区三区婷婷 | 日韩精品一级二级| 26uuu国产在线精品一区二区| 欧美精品日韩一区| 欧美日韩一区高清| 7777精品伊人久久久大香线蕉完整版| 欧美婷婷六月丁香综合色| 精品国产91久久久久久久妲己| 欧美三电影在线| 在线免费不卡视频| 欧美三级电影一区| 欧美日韩国产bt| 欧美精品一卡两卡| 精品成人佐山爱一区二区| 日韩欧美电影一区| 色婷婷av一区二区三区大白胸| 不卡的电影网站| 99国产精品久久久久| 91同城在线观看| 欧美日韩亚洲不卡| 日韩你懂的电影在线观看| 精品国产亚洲一区二区三区在线观看| 精品国产乱码久久久久久久| 中文字幕欧美区| 一区二区三区高清| 视频一区视频二区中文| 国产精品996| 色偷偷一区二区三区| 欧美中文字幕一区| 欧美大胆一级视频| 最新高清无码专区| 亚洲五月六月丁香激情| 中文字幕在线不卡视频| 亚洲欧美另类久久久精品2019| 亚洲综合在线第一页| 欧美激情一区二区三区全黄| 国产精品国产三级国产aⅴ无密码| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品一区二区精华| 中文字幕在线一区免费| 亚洲福利国产精品| 国产一区二区三区久久久| av在线免费不卡| eeuss国产一区二区三区| 日本电影亚洲天堂一区| 久久成人综合网| 成人看片黄a免费看在线| 欧美日韩电影在线| 亚洲国产精品传媒在线观看| 石原莉奈一区二区三区在线观看| 丁香天五香天堂综合| 337p亚洲精品色噜噜噜| 综合中文字幕亚洲| 粉嫩av一区二区三区在线播放 | 欧美精品久久久久久久久老牛影院| 欧美tickling网站挠脚心| 一区二区三区在线免费| 国产成人亚洲综合色影视| 欧美高清视频www夜色资源网| 国产午夜亚洲精品不卡| 国产欧美日韩综合| 日本欧洲一区二区| 日本道精品一区二区三区| 久久精品在线免费观看| 欧美aa在线视频| 欧美日韩电影在线| 五月婷婷欧美视频| 欧美午夜精品理论片a级按摩| 中文字幕国产一区| 国产精品一区二区免费不卡| 精品久久久久久亚洲综合网| 日日摸夜夜添夜夜添精品视频| 日本韩国一区二区三区| 17c精品麻豆一区二区免费| 成人黄色在线网站| 中文字幕精品在线不卡| gogogo免费视频观看亚洲一| 国产女人18毛片水真多成人如厕| 九色综合国产一区二区三区| 日韩三级视频中文字幕| 精品一区二区三区影院在线午夜| 日韩午夜激情免费电影| 奇米影视一区二区三区小说| 日韩欧美的一区| 国产黄色精品网站| 国产日产欧美精品一区二区三区| 国产盗摄精品一区二区三区在线 | 日本不卡在线视频| 欧美大片国产精品| 福利视频网站一区二区三区| 国产欧美日韩亚州综合 | 麻豆久久一区二区| 久久精品一区八戒影视| 高清不卡一二三区| 一区二区三区中文字幕精品精品| 欧美午夜电影网| 老司机精品视频导航| 精品国产自在久精品国产| 国产高清精品网站| 一区2区3区在线看| 日韩精品一区二区三区在线播放| 国产一区在线观看视频| 亚洲欧美怡红院| 欧美福利电影网| 成熟亚洲日本毛茸茸凸凹| 有码一区二区三区| 欧美成人官网二区| 色哦色哦哦色天天综合| 久久国产尿小便嘘嘘尿| 国产精品久久久久久久久免费桃花| 欧美色视频在线观看| 国产一区二区精品久久| 亚洲精品伦理在线| 91精品国产综合久久久蜜臀粉嫩| 国产寡妇亲子伦一区二区| 亚洲一区二区三区四区在线观看 | 欧美精品一区二区精品网| 91在线视频官网| 黄网站免费久久| 一区二区三区不卡视频在线观看| 337p亚洲精品色噜噜| 不卡一卡二卡三乱码免费网站| 五月激情丁香一区二区三区| 欧美—级在线免费片| 精品久久久久久久久久久院品网| av在线不卡网| 国产主播一区二区| 亚洲一区二区成人在线观看| 久久久久国产精品人| 国产二区国产一区在线观看 | 中文字幕欧美一| 精品欧美黑人一区二区三区| 色噜噜狠狠色综合欧洲selulu| 激情国产一区二区| 青青国产91久久久久久| 亚洲亚洲精品在线观看| 综合久久久久综合| 国产精品欧美极品| 欧美私模裸体表演在线观看| 国产精品一卡二卡在线观看|