国产午夜成人免费看片无遮挡_日本免费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>

        视频一区二区三区中文字幕| 日韩精品一区二区三区四区| jizzjizzjizz欧美| 欧美日韩一区成人| 国产精品乱码妇女bbbb| 日本美女一区二区| 日本韩国欧美在线| 国产三级精品三级在线专区| 美女网站在线免费欧美精品| 欧美三片在线视频观看| 日韩一级大片在线| 国产午夜精品一区二区三区嫩草| 香蕉av福利精品导航| 91精彩视频在线| 欧美经典三级视频一区二区三区| 极品少妇一区二区三区精品视频| 欧美一级淫片007| 五月天激情综合| 欧美日韩视频专区在线播放| 在线亚洲一区观看| 中文字幕字幕中文在线中不卡视频| 高清不卡一区二区在线| 久久午夜老司机| 成人高清在线视频| 久久综合给合久久狠狠狠97色69| 久久精品一区二区三区不卡 | 国产精品成人一区二区艾草| 国产精品一区二区男女羞羞无遮挡| 亚洲高清久久久| 欧美电影一区二区| 久久精品噜噜噜成人88aⅴ | 日韩精品视频网站| 69久久99精品久久久久婷婷| 久草中文综合在线| 久久久久久久久久久久久久久99| 国产成a人亚洲精| 亚洲人精品午夜| 欧美精品v国产精品v日韩精品| 久久天天做天天爱综合色| 国产精品77777竹菊影视小说| 日韩一区中文字幕| 欧美日韩一区二区在线观看视频 | 国产.欧美.日韩| 国产精品久99| 欧美疯狂做受xxxx富婆| 国产美女在线精品| 久久久美女毛片| 国产九色精品成人porny| 亚洲丝袜另类动漫二区| 欧美一区二区精品在线| 国产精品资源网| 亚洲一区二区精品3399| 精品播放一区二区| 欧美在线观看视频一区二区三区| 自拍偷拍亚洲综合| 日本精品免费观看高清观看| 狠狠色丁香久久婷婷综合_中| 亚洲麻豆国产自偷在线| 欧美成人女星排名| 奇米综合一区二区三区精品视频| 国产精品久久久久aaaa樱花| 日韩欧美一级精品久久| 美脚の诱脚舐め脚责91 | 国产午夜亚洲精品午夜鲁丝片| 色一情一伦一子一伦一区| 久久99国产精品尤物| 一区二区三区在线视频免费观看| 精品剧情v国产在线观看在线| 日本视频一区二区| 2017欧美狠狠色| 欧美日韩视频在线第一区 | 精品一区二区免费视频| 亚洲成年人网站在线观看| 国产精品美女一区二区在线观看| 欧美一区二区不卡视频| 欧美色视频在线| 91丨porny丨中文| 亚洲一区在线免费观看| 中文字幕一区二区三区在线播放| 亚洲精品一区二区三区99| 欧美日韩成人激情| 欧美午夜影院一区| 日本vs亚洲vs韩国一区三区 | 一本到不卡精品视频在线观看| 国产美女娇喘av呻吟久久 | 777亚洲妇女| 欧美群妇大交群中文字幕| 在线免费观看成人短视频| www.66久久| 91在线播放网址| 一本一道波多野结衣一区二区| av电影在线观看完整版一区二区| 成人午夜在线视频| 成人美女视频在线观看| 91色porny在线视频| 91美女在线看| 欧美午夜精品电影| 欧美精品123区| 欧洲一区二区三区在线| 成人永久看片免费视频天堂| 香港成人在线视频| 日本欧美一区二区| 国产在线看一区| 成人免费视频一区二区| 色综合天天综合在线视频| 日本韩国精品一区二区在线观看| 色婷婷综合在线| 99久久免费精品| 色久综合一二码| 日韩中文字幕91| 亚洲综合久久久| 蜜臀av性久久久久蜜臀av麻豆 | 久久99精品久久久久久| 国产一区亚洲一区| 成人黄色在线看| 亚洲v中文字幕| 国产一区视频导航| 日韩电影在线一区二区三区| 久久激情五月激情| 99久久精品国产观看| 欧美一a一片一级一片| 久久伊人蜜桃av一区二区| 国产精品区一区二区三| 国产精品视频观看| 欧美自拍偷拍一区| 一区二区三区日韩欧美精品| 午夜一区二区三区视频| 成人av电影在线观看| 91女厕偷拍女厕偷拍高清| 国产成人在线电影| 99re这里都是精品| 日韩欧美123| 国产精品福利一区| 日本成人在线电影网| 91免费国产在线| a4yy欧美一区二区三区| 91精品国产福利在线观看| 亚洲成国产人片在线观看| 91搞黄在线观看| 一区二区三区四区激情| 色呦呦国产精品| 亚洲最大成人网4388xx| 在线观看日韩av先锋影音电影院| 亚洲欧美日韩国产中文在线| 东方欧美亚洲色图在线| 久久一区二区视频| 激情综合五月婷婷| 国产视频一区二区在线| 国产精品69久久久久水密桃| 91精品在线观看入口| 国产一区91精品张津瑜| 欧美一级片在线观看| 亚洲亚洲精品在线观看| 美女国产一区二区三区| 精品av久久707| 久久电影网电视剧免费观看| 69p69国产精品| 手机精品视频在线观看| 日韩欧美不卡在线观看视频| 亚洲一二三四久久| 色先锋aa成人| 一区二区三区高清| 欧美电影免费观看完整版| 免费不卡在线观看| 欧美日韩精品系列| 同产精品九九九| 中文字幕乱码久久午夜不卡 | 色噜噜狠狠色综合欧洲selulu| 亚洲精品一区二区三区在线观看| 波多野结衣一区二区三区| 国产精品视频看| 色综合天天狠狠| 一区二区三区高清| 久久精品网站免费观看| 99视频精品全部免费在线| 亚洲色图视频网站| 欧美日韩一区小说| 亚洲乱码国产乱码精品精的特点| 欧美专区日韩专区| 六月丁香综合在线视频| 久久精品亚洲一区二区三区浴池 | 日本高清无吗v一区| 国产一区二区三区免费观看| 国产精品丝袜在线| 91极品美女在线| 日本欧美肥老太交大片| 亚洲久本草在线中文字幕| 欧美色网一区二区| 国产精品视频线看| 丁香婷婷综合网| 夜夜爽夜夜爽精品视频| 日韩欧美国产综合一区| 成人免费黄色大片| 亚洲精品欧美二区三区中文字幕| 欧美精三区欧美精三区| 91色.com| 国产精品亚洲第一| 亚洲影视在线播放| 欧美日韩一级视频| 欧美午夜免费电影|