青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

MyMSDN

MyMSDN記錄開(kāi)發(fā)新知道

C++ notes (5)

41、vector、list、deque的性能初窺

int large_size = 10000000;

cout_current_time("start init vector!\t");
vector<string> svec1(large_size, "Hello");
vector<string> svec2(large_size, "Hi");
cout_current_time("end init vector!\t");

cout_current_time("start init list!\t");
list<string> slist1(large_size, "Hello");
list<string> slist2(large_size, "Hi");
cout_current_time("end init list!\t");

cout_current_time("start init deque!\t");
deque<string> sdeq1(large_size, "Hello");
deque<string> sdeq2(large_size, "Hi");
cout_current_time("end init deque!\t");

用事實(shí)說(shuō)話最有說(shuō)服力:

start init vector!    current time : 5:5:52
end init vector!    current time : 5:5:55
start init list!    current time : 5:5:55
end init list!    current time : 5:6:14
start init deque!    current time : 5:6:14
end init deque!    current time : 5:6:26

可以看出大致時(shí)間比例為3/19/12。雖然不足以佐證它們的性能差距,但vector的常用似乎有了更充分的理由。

這里使用了一個(gè)簡(jiǎn)單的時(shí)間函數(shù)大致如下:

#include <time.h>

typedef struct
tm * time_type; time_type get_current_time(void) { time_t t; t = time(NULL); return localtime(&t); }

42、容器自增長(zhǎng)(P286)

每種實(shí)現(xiàn)都要求遵循以下原則:確保push_back操作高效地在vector中添加元素。從技術(shù)上來(lái)說(shuō),在原來(lái)為空的vector容器上n次調(diào)用push_back函數(shù),從而創(chuàng)建擁有n個(gè)元素的vector容器,其執(zhí)行時(shí)間永遠(yuǎn)不能超過(guò)n的常量倍。

43、類(lèi)定義中為何不能具有自身的數(shù)據(jù)成員(P375)

因?yàn)橹挥挟?dāng)類(lèi)定義體完成后才能定義類(lèi),因此類(lèi)不能具有自身類(lèi)型的數(shù)據(jù)成員。然而,只要類(lèi)名一出現(xiàn)就可以認(rèn)為該類(lèi)已聲明。因此,類(lèi)的數(shù)據(jù)成員可以是指向自身類(lèi)型的指針或引用:

class LinkScreen {

Screen window;

LinkScreen *next;

LinkScreen *prev;

};

44、兩種引用類(lèi)類(lèi)型的方法(P376)

Sales_item item1; //default initialized object of type Sales_item

class Sales_item item1; //equivalent definition of item1

兩種引用類(lèi)類(lèi)型的方法是等價(jià)的。第二種方法是從C繼承而來(lái)的,在C++中仍然有效。第一種更為簡(jiǎn)練,由C++語(yǔ)言引入,使得類(lèi)類(lèi)型更容易使用。

45、為什么類(lèi)的定義以分號(hào)結(jié)束(P376)

分號(hào)是必須的,因?yàn)樵陬?lèi)定義之后可以接一個(gè)對(duì)象定義列表。定義必須以分號(hào)結(jié)束:

class Sales_item {/* … */};

class Sales_item {/* … */} accum, trans;

46、形參表和函數(shù)體處于類(lèi)作用域中,函數(shù)返回類(lèi)型不一定在類(lèi)作用域中

在定義于類(lèi)外部的成員函數(shù)中,形參表和成員函數(shù)體都出現(xiàn)在成員名之后。這些都是在類(lèi)作用域中定義,所以可以不用限定而引用其他成員。因?yàn)樾螀⒈硎窃赟creen類(lèi)作用域內(nèi),所以不必知名我們想要的是Screen::index。

如果返回類(lèi)型使用由類(lèi)定義的類(lèi)型,則必須使用完全限定名。

#include "stdafx.h"
#include <iostream>

class MyClass
{
public :
    typedef int index_t;
    index_t twice(index_t in);
};

MyClass::index_t MyClass ::twice(index_t in)
{
    return in * 2;
}

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std; 
    
    MyClass obj;
    MyClass::index_t x, y;
    
    x = 10;
    y = obj.twice(x);

    cout<<"x = "<<x<<"; y = "<<y<<";"<<endl;

    return 0;
}

47、構(gòu)造函數(shù)初始化式(P387)

與任意的成員函數(shù)一樣,構(gòu)造函數(shù)可以定義在類(lèi)的內(nèi)部或外部。構(gòu)造函數(shù)初始化式只在構(gòu)造函數(shù)的定義中而不是聲明中指定。

構(gòu)造函數(shù)初始化列表難以理解的一個(gè)原因在于,省略初始化列表并在構(gòu)造函數(shù)的函數(shù)體內(nèi)對(duì)數(shù)據(jù)成員賦值是合法的。

在構(gòu)造函數(shù)初始化列表中沒(méi)有顯式提及的每個(gè)成員,使用與初始化變量相同的規(guī)則來(lái)進(jìn)行初始化。運(yùn)行該類(lèi)型的默認(rèn)構(gòu)造函數(shù),來(lái)初始化類(lèi)類(lèi)型的數(shù)據(jù)成員。內(nèi)置或復(fù)合類(lèi)型的成員的初始值依賴(lài)于對(duì)象的作用域:在局部作用域中這些成員不被初始化,而在全局作用域中它們被初始化為0。

如果那個(gè)類(lèi)沒(méi)有默認(rèn)構(gòu)造函數(shù),則編譯器嘗試使用默認(rèn)構(gòu)造函數(shù)將會(huì)失敗。在這種情況下,為了初始化數(shù)據(jù)成員,必須提供初始化式。

對(duì)于這樣的成員,在構(gòu)造函數(shù)函數(shù)體中對(duì)它們賦值不起作用。沒(méi)有默認(rèn)構(gòu)造函數(shù)的類(lèi)類(lèi)型成員,以及const或引用類(lèi)型的成員,不管是哪種類(lèi)型,都必須在構(gòu)造函數(shù)初始化列表中進(jìn)行初始化。

因?yàn)閮?nèi)置類(lèi)型的成員不進(jìn)行隱式初始化,所以對(duì)這些成員是進(jìn)行初始化還是賦值似乎都無(wú)關(guān)緊要。除了兩個(gè)例外,對(duì)非類(lèi)類(lèi)型的數(shù)據(jù)成員進(jìn)行賦值或使用初始化式在結(jié)果和性能上都是等價(jià)的。

48、成員初始化的次序

構(gòu)造函數(shù)初始化列表僅指定用于初始化成員的值,并不指定這些初始化執(zhí)行的次序。成員被初始化的次序就是定義成員的次序。

class X{

int i;

int j;

public:

//run-time error: i is initialized before j

X(int val): j(val), i(j) {}

}

在這種情況下,構(gòu)造函數(shù)初始化列表看起來(lái)似乎是用val初始化j,然后再用j來(lái)初始化i。然而i首先被初始化。這個(gè)初始化列表的效果是用尚未初始化的j值來(lái)初始化i!

49、使用默認(rèn)構(gòu)造函數(shù)(P393)

常犯的一個(gè)錯(cuò)誤是采用以下方式聲明一個(gè)用默認(rèn)構(gòu)造函數(shù)初始化的對(duì)象:

Sales_item myobj();

Sales_item myobj(); //ok: but defines a function, not an object

if(myobj.same_isbn(Primer_3rd_ed)) // error: myobj is a function

正確的方式應(yīng)該是去掉相應(yīng)的括號(hào):

Sales_item myobj;

或者

Sales_item myobj = Sales_item();

50、顯式或隱式初始化

#include "stdafx.h"
#include <iostream>
using namespace std; 
class MyClass
{
public :
    typedef int index_t;
    bool same_object(MyClass obj);

public :
    MyClass(int default_index = 5)
        :default_index(default_index),
        m_name("default_name"){}
    MyClass::MyClass(std::string name);

public :
    int default_index;
    std::string m_name;
};

MyClass::MyClass(std::string name)
        :default_index(0), m_name(name){}

bool MyClass::same_object(MyClass obj)
{
    cout<<"m_name = "<<m_name.c_str()<<endl;
    cout<<"obj.m_name = "<<obj.m_name.c_str()<<endl;
    return strcmp(obj.m_name.c_str(), m_name.c_str()) == 0;
}

int _tmain(int argc, _TCHAR* argv[])
{    
    MyClass obj;

    cout<<"explicit : "<<obj.same_object(MyClass("default_name"))<<endl;
    cout<<"implicit : "<<obj.same_object(string("default_name"))<<endl;

    return 0;
}

因?yàn)榫哂幸詓td::string為形參的構(gòu)造函數(shù),因此在調(diào)用需要MyClass對(duì)象的same_object成員函數(shù)時(shí),會(huì)自動(dòng)隱式調(diào)用該構(gòu)造函數(shù)構(gòu)建MyClass對(duì)象,用于操作。但生成的MyClass對(duì)象是臨時(shí)對(duì)象,在same_object函數(shù)調(diào)用完成后銷(xiāo)毀。如果為了避免產(chǎn)生隱式轉(zhuǎn)換可以使用explicit關(guān)鍵字來(lái)抑制由構(gòu)造函數(shù)定義的隱式轉(zhuǎn)換:

explicit

posted on 2009-02-12 01:06 volnet 閱讀(1239) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C++ Primer 學(xué)習(xí)筆記

特殊功能
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区欧美日韩| 久久动漫亚洲| 一区二区三区福利| 欧美日韩一二三四五区| 亚洲无限av看| 午夜精彩视频在线观看不卡| 狠狠色综合网| 亚洲黄色大片| 欧美色大人视频| 久久狠狠亚洲综合| 欧美va亚洲va国产综合| 亚洲视频免费观看| 午夜欧美理论片| 亚洲精品乱码久久久久久日本蜜臀 | 欧美 日韩 国产精品免费观看| 亚洲精品一品区二品区三品区| 亚洲视频日本| 在线国产日韩| 亚洲视频一区| 亚洲激情在线观看| 亚洲视频在线观看三级| 黑人巨大精品欧美一区二区小视频 | 美日韩免费视频| 欧美日韩亚洲一区二| 久久久久久亚洲精品中文字幕| 欧美高清视频在线| 欧美一区二区三区四区高清| 欧美激情一二区| 久久精品一区二区三区四区| 欧美精品日韩一本| 久久青草久久| 国产精品久久久久久久一区探花 | 久久精品夜色噜噜亚洲a∨| 一区二区三区视频在线看| 久久国产精品一区二区三区四区 | 好吊妞**欧美| 一区二区欧美在线| 91久久亚洲| 欧美在线精品免播放器视频| 亚洲一区精品视频| 欧美承认网站| 欧美成人一区二区| 国产日韩在线看| 亚洲图片自拍偷拍| 夜夜爽www精品| 欧美99在线视频观看| 久久久久久久综合色一本| 国产精品男gay被猛男狂揉视频| 亚洲国产mv| 亚洲国产日韩欧美在线图片| 久久九九热免费视频| 久久精品国产久精国产爱| 国产精品永久免费在线| 亚洲一二三区在线| 亚洲一区视频| 国产精品久久久久久久久婷婷| 久久人人爽人人爽| 亚洲电影观看| 久久久精品国产免大香伊| 性欧美video另类hd性玩具| 国产精品久久久久毛片大屁完整版| 亚洲人精品午夜| 一本一本a久久| 欧美激情在线| 99视频一区二区三区| 一区二区三区四区蜜桃| 欧美色欧美亚洲另类七区| 亚洲第一精品夜夜躁人人躁 | 可以看av的网站久久看| 久久精品99国产精品| 国产一区二区中文| 久久免费一区| 亚洲国产高清一区| 亚洲精品一区二区三区樱花| 欧美精品日韩精品| 一区二区三区日韩精品| 亚洲欧美国产另类| 国内精品久久久久久久97牛牛| 久久av在线看| 亚洲国产日韩一区| 亚洲一区国产精品| 国内精品久久久久久久影视麻豆 | 蜜臀av国产精品久久久久| 亚洲激情网站| 午夜激情综合网| 伊人久久亚洲影院| 欧美精品福利在线| 亚洲免费影视第一页| 免费不卡在线观看| 亚洲午夜在线观看| 国自产拍偷拍福利精品免费一| 麻豆精品在线视频| 国产精品99久久久久久人| 久久伊人一区二区| 一本色道久久综合亚洲精品婷婷| 国产精品无码永久免费888| 久久久久国产精品人| 99riav久久精品riav| 久久九九热re6这里有精品| 亚洲精品视频免费在线观看| 国产精品久久久久久久久久久久久久| 欧美一区2区三区4区公司二百| 亚洲大黄网站| 久久精品免费观看| 99精品久久久| 欲香欲色天天天综合和网| 欧美午夜三级| 你懂的国产精品永久在线| 午夜在线精品| 一本久久综合| 亚洲欧洲免费视频| 噜噜噜躁狠狠躁狠狠精品视频 | 久久国产精品黑丝| 一区二区三区欧美激情| 1024欧美极品| 国产日韩欧美自拍| 欧美三级不卡| 欧美激情第三页| 久久久久这里只有精品| 午夜精品久久久久影视| av成人毛片| 亚洲精品欧美日韩| 亚洲第一精品夜夜躁人人爽| 欧美电影在线观看完整版| 欧美高清免费| 卡通动漫国产精品| 久久天堂成人| 久久精品国产99精品国产亚洲性色| 中文高清一区| 中国av一区| 亚洲视频视频在线| 亚洲午夜高清视频| 一区二区黄色| 亚洲私人影院在线观看| 一区二区三区精品在线| 99视频一区| 亚洲图片在线| 在线亚洲伦理| 亚洲男女自偷自拍| 亚洲欧美另类国产| 欧美一区二区三区在| 欧美中文字幕在线| 久久天天躁狠狠躁夜夜爽蜜月| 久久久久久久高潮| 蜜桃av噜噜一区二区三区| 美女主播精品视频一二三四| 欧美成人黑人xx视频免费观看| 免费视频最近日韩| 亚洲电影在线| 激情欧美日韩一区| 在线观看一区视频| 亚洲精品一区二区三区蜜桃久| 亚洲精品之草原avav久久| 一本久久精品一区二区| 亚洲你懂的在线视频| 亚洲欧美在线免费| 久久精品国产精品| 欧美激情偷拍| 一区二区国产在线观看| 亚洲欧美一区二区精品久久久| 欧美在线日韩| 欧美韩日亚洲| 国产精品久久久久av| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲国内精品在线| 亚洲午夜一二三区视频| 久久久久久久综合狠狠综合| 欧美黑人在线播放| 亚洲一区二区视频在线观看| 久久久青草青青国产亚洲免观| 欧美国产日韩一区二区在线观看 | 亚洲东热激情| 亚洲婷婷综合久久一本伊一区| 欧美一区午夜精品| 欧美福利视频在线观看| 在线综合视频| 久久亚洲精品网站| 国产精品久久久久久久久久ktv| 一区二区在线视频观看| 在线视频中文亚洲| 另类激情亚洲| 亚洲欧美日韩国产综合| 欧美高清hd18日本| 国产综合久久久久久鬼色| 99精品国产福利在线观看免费| 久久国产精品一区二区三区四区 | 一区二区av| 免费成年人欧美视频| 国产精品一区久久| 一本一本久久a久久精品综合麻豆| 久久精品一区二区| 一本综合精品| 欧美精品一区二区三区很污很色的| 国产日韩欧美精品在线| 亚洲午夜久久久| 亚洲精品久久久久| 久久资源在线| 精品电影一区| 久久久噜噜噜久噜久久| 亚洲免费人成在线视频观看|