歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++ 中的特殊關鍵字

C++ 中的特殊關鍵字

日期:2017/3/1 10:12:19   编辑:Linux編程

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