六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

在STL容器中使用范圍檢查

[摘要]訪問內(nèi)建數(shù)組的元素是一種速度非常快的操作,因?yàn)?C++ 在運(yùn)行時(shí)期不執(zhí)行范圍檢查。但是,這樣做的后果是,一個(gè)不小心的語句會(huì)把程序帶入一個(gè)未定義的狀態(tài),例如: char s[10]; void func(char * str) s[12]='\0'; //...

    訪問內(nèi)建數(shù)組的元素是一種速度非常快的操作,因?yàn)?C++ 在運(yùn)行時(shí)期不執(zhí)行范圍檢查。但是,這樣做的后果是,一個(gè)不小心的語句會(huì)把程序帶入一個(gè)未定義的狀態(tài),例如:

    char s[10];
    void func(char * str)
    {
     s[12]='\0'; //undefined; writing past a buffer's end
    }

    一些程序員錯(cuò)誤地認(rèn)為 STL 容器,比如 std::vector 和 std::string 等,除了其它優(yōu)點(diǎn)之外還實(shí)現(xiàn)了自動(dòng)的范圍檢查。事實(shí)上,情況并非如此。在使用重載的 [] 操作符訪問一個(gè) vector 的元素時(shí),事實(shí)上并沒有執(zhí)行范圍檢查。同樣對(duì)其它序列容器,情況也是如此,這樣的容器有 std::string 和 std::dequeue 等。

    范圍檢查會(huì)帶來可觀的空間開銷和運(yùn)行時(shí)間開銷。強(qiáng)加這種開銷給用戶將會(huì)使得這些容器顯著地變慢,因此變得用處不大。相反,C++ 堅(jiān)持“相信程序員”的風(fēng)格。注意,范圍檢查在很多情況下是沒有必要的。

    std::vector<int> vi;
    //..fill the vector
    for (int n=0; n<vi.size(); n++)
    {
     std::cout<<vi[n]<<std::endl; //n is always valid
    }

    重載的 [] 操作符是一個(gè)成熟的功能。其實(shí)現(xiàn)的效率非常高,并且其調(diào)用通常是內(nèi)聯(lián)的(inline)。這樣,它幾乎提供了與其它相應(yīng)內(nèi)建操作相同的速度。

    什么時(shí)候范圍檢查是不同避免的

    只有很少的情況下范圍檢查才是不可避免的。在這些情況下,STL 容器提供一個(gè)更加安全(但是速度也更慢)的方法來訪問元素,即 at() 成員函數(shù)。at() 在功能上與重載的 [] 操作符很相似,但是它執(zhí)行范圍檢查。如果參數(shù)是無效的,at() 就拋出一個(gè) std::out_of_range 異常。因此,我們應(yīng)該總是將 at() 調(diào)用包圍在一個(gè) try 代碼塊中,并提供一個(gè)與之匹配的 catch() 子句:

    void assign(std::string & s, int index, char val)
    {
     try
     {
      s.at(index)=val;
     }
     catch (std::out_of_range & exc)
     {
      std::cerr <<exc.what();
     }
    }

    總之,使用 [] 操作符訪問容器元素的效率是很高的,如果范圍檢查不可避免,那么可以使用 at() 替代操作符 []。記住,在這種情況下一定要把對(duì) at() 函數(shù)的調(diào)用包圍在一個(gè) try 代碼塊中并提供一個(gè)匹配的 catch() 子句。




主站蜘蛛池模板: 我要看黄色一级片 | 欧美线人一区二区三区 | 亚洲综合自拍 | 日韩国产欧美 | 日韩精品第一区 | 亚洲va中文字幕无码 | 三级www | 天天干天天添 | 亚洲精品老司机综合影院 | 日本理论片免费观看在线视频 | 亚洲成a人片在线观看www | 羞羞漫画弹窗 | 天天噜天天干 | 新久草视频 | 午夜网站在线观看 | 欧洲亚洲欧美国产日本高清 | 日韩大片观看网址 | 日日拍夜夜拍 | 全免费观看一级 | 全黄一级裸片视频免费 | 天天干天天曰天天操 | 在线播放亚洲视频 | 日本爽爽爽爽爽爽在线观看免 | 在线观看视频国产 | 最新天堂网 | 日本免费看片 | 日韩一卡 二卡 三卡 四卡 免费视频 | 欧美做真爱免费无遮挡 | 日韩不卡一二三区 | 欧美视频综合 | 欧美一卡二卡三卡四卡 | 日韩去日本高清在线 | 亚洲欧美日韩一区高清中文字幕 | 亚洲欧美日韩国产色另类 | 亚洲宅男天堂a在线 | 午夜精品久久久久久 | 五月婷婷七月丁香 | 五月婷六月丁香 | 日本中文一区 | 欧美视频在线播放观看免费福利资源 | 中文字幕精品亚洲无线码二区 |