歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++ 中的特殊關鍵字

typename

1)typename   var_name;表示var_name的定義還沒有給出,這個語句通常出現在模版的定義內,例如:

template   <class   T>

void   f()   {

typedef   typename   T::A   TA;   //   聲明   TA   的類型為   T::A

TA   a5;                     //   聲明   a5   的類型為   TA

typename   T::A   a6;                   //   聲明   a6   的類型為   T::A

TA   *   pta6;                           //   聲明   pta6   的類型為   TA   的指針

}

因為T是一個模版實例化時才知道的類型,所以編譯器更對T::A不知所雲,為了通知

編譯器T::A是一個合法的類型,使用typename語句可以避免編譯器報錯。

2)template   <   typename   var_name     >   class   class_name;   表示var_name是一個類型,

在模版實例化時可以替換任意類型,不僅包括內置類型(int等),也包括自定義類型class。

這就是問題中的形式,換句話說,在template<typename   Y>和template<class   Y>中,

typename和class的意義完全一樣。

建議在這種語句中盡可能采用typename,以避免錯覺(以為只能替換class,不能只換int),

這也是C++新標准引進typename關鍵詞的一個初衷

set,vector

set中存放的是唯一的數值,而vector中沒此限制,set::find和set::insert消耗時間級別都為logN,但是因為使用的是紅黑樹,所以空間開銷較大。

1.使用set:當元素個數可能會變得足夠大,即N足夠大,logN和N的區別非常明顯之時,元素是隨機插入的,插入和搜索交互發生,無法預料下一次的操作。

2.使用sorted_vector:需要快速的搜索和遍歷,但是對插入的性能要求很低,或者元素是預先一次性插入的,然後排序好, 在此基礎上進行二分搜索。亦或者對內存限制較大。或者確信搜索操作和插入、刪除操作幾乎不交錯在一起。或者元素的插入是“幾乎有序”的,這樣的插入的額外負擔較小。

Copyright © Linux教程網 All Rights Reserved