日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

c++标准库 及 命名空间std

發(fā)布時(shí)間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++标准库 及 命名空间std 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、命名空間std
  C++標(biāo)準(zhǔn)中引入命名空間的概念,是為了解決不同模塊或者函數(shù)庫(kù)中相同標(biāo)識(shí)符沖突的問(wèn)題。有了命名空間的概念,標(biāo)識(shí)符就被限制在特定的范圍(函數(shù))內(nèi),不會(huì)引起命名沖突。最典型的例子就是std命名空間C++標(biāo)準(zhǔn)庫(kù)中所有標(biāo)識(shí)符都包含在該命名空間中
  如果確信在程序中引用某個(gè)或者某些程序庫(kù)不會(huì)引起命名沖突(即庫(kù)中的標(biāo)識(shí)符不會(huì)在程序中代表其他函數(shù)名稱),那么可以通過(guò)using操作符來(lái)簡(jiǎn)化對(duì)程序庫(kù)中標(biāo)識(shí)符(通常時(shí)函數(shù))的使用,例如:using namespace std;那么就可以不用在標(biāo)識(shí)符在前綴std::來(lái)使用C++標(biāo)準(zhǔn)庫(kù)庫(kù)中的函數(shù)了。

?

  <iostream>和<iostream.h>是不一樣,前者沒(méi)有后綴,實(shí)際上,在你的編譯器include文件夾里面可以看到,二者是兩個(gè)文件,打開文件就會(huì)發(fā)現(xiàn),里面的代碼是不一樣的。后綴為.h的頭文件c++標(biāo)準(zhǔn)已經(jīng)明確提出不支持了,早些的實(shí)現(xiàn)將標(biāo)準(zhǔn)庫(kù)功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c++標(biāo)準(zhǔn)為了和C區(qū)別開,也為了正確使用命名空間,規(guī)定頭文件不使用后綴.h。因此,當(dāng)使用<iostream.h>時(shí),相當(dāng)于在c中調(diào)用庫(kù)函數(shù),使用的是全局命名空間,也就是早期的c++實(shí)現(xiàn);當(dāng)使用<iostream>的時(shí)候,該頭文件沒(méi)有定義全局命名空間,必須使用namespacestd;這樣才能正確使用cout。、

?

  C++標(biāo)準(zhǔn)程序庫(kù)中的所有標(biāo)識(shí)符都被定義于一個(gè)名為std的namespace中。由于namespace的概念,使用C++標(biāo)準(zhǔn)程序庫(kù)的任何標(biāo)識(shí)符時(shí),可以有三種選擇:

1、直接指定標(biāo)識(shí)符。例如std::ostream而不是ostream。完整語(yǔ)句如下:

?

  std::cout << std::hex<< 3.4<< std::endl;

?

2、使用using關(guān)鍵字。

?

  using std::cout;
  using std::endl;

?

以上程序可以寫成

?

  cout << std::hex<< 3.4<< endl;

?

3、最方便的就是使用using namespace std;

?

例如:

?

  #include <iostream>
  #include <sstream>
  #include <string>
  using namespace std;
這樣命名空間std內(nèi)定義的所有標(biāo)識(shí)符都有效(曝光)。就好像它們被聲明為全局變量一樣。那么以上語(yǔ)句可以如下寫:

?

  cout << hex<< 3.4<< endl;

?

  因?yàn)闃?biāo)準(zhǔn)庫(kù)非常的龐大,所程序員在選擇的類的名稱或函數(shù)名時(shí)就很有可能和標(biāo)準(zhǔn)庫(kù)中的某個(gè)名字相同。所以為了避免這種情況所造成的名字沖突,就把標(biāo)準(zhǔn)庫(kù)中的一切都被放在名字空間std中。但這又會(huì)帶來(lái)了一個(gè)新問(wèn)題。無(wú)數(shù)原有的C++代碼都依賴于使用了多年的偽標(biāo)準(zhǔn)庫(kù)中的功能,他們都是在全局空間下的。?所以就有了<iostream.h>和<iostream>等等這樣的頭文件,一個(gè)是為了兼容以前的C++代碼,一個(gè)是為了支持新的標(biāo)準(zhǔn)。命名空間std封裝的是標(biāo)準(zhǔn)程序庫(kù)的名稱,標(biāo)準(zhǔn)程序庫(kù)為了和以前的頭文件區(qū)別,一般不加".h"。

比如
#include <iostream>
using namespace std;
void main()
{cout<< "hello!"<< endl;
}
如果不用using namespace std;這句,那么用如下
std::cout << "hello!"<<std::endl;

C++標(biāo)準(zhǔn)庫(kù)

?

C++標(biāo)準(zhǔn)庫(kù)的所有頭文件都沒(méi)有擴(kuò)展名。C++標(biāo)準(zhǔn)庫(kù)的內(nèi)容總共在50個(gè)標(biāo)準(zhǔn)頭文件中定義,其中18個(gè)提供了C庫(kù)的功能。<cname>形式的標(biāo)準(zhǔn)頭文件【<complex>例外】其內(nèi)容與ISO標(biāo)準(zhǔn)C包含的name.h頭文件相同,但容納了C++擴(kuò)展的功能。在<cname>形式標(biāo)準(zhǔn)的頭文件中,與宏相關(guān)的名稱在全局作用域中定義,其他名稱在std命名空間中聲明。在C++中還可以使用name.h形式的標(biāo)準(zhǔn)C庫(kù)頭文件名。

C++標(biāo)準(zhǔn)庫(kù)的內(nèi)容分為10類:
C1.語(yǔ)言支持?C2.輸入/輸出?C3.診斷?C4.一般工具?C5.字符串?
C6.容器?C7.迭代器支持?C8.算法?C9.數(shù)值操作?C10.本地化

C1?標(biāo)準(zhǔn)庫(kù)中與語(yǔ)言支持功能相關(guān)的頭文件?頭文件??描述??
<cstddef>?定義宏NULL和offsetof,以及其他標(biāo)準(zhǔn)類型size_t和ptrdiff_t。與對(duì)應(yīng)的標(biāo)準(zhǔn)C頭文件的區(qū)別是,NULL是C++空指針常量的補(bǔ)充定義,宏offsetof接受結(jié)構(gòu)或者聯(lián)合類型參數(shù),只要他們沒(méi)有成員指針類型的非靜態(tài)成員即可。?
<limits>?提供與基本數(shù)據(jù)類型相關(guān)的定義。例如,對(duì)于每個(gè)數(shù)值數(shù)據(jù)類型,它定義了可以表示出來(lái)的最大值和最小值以及二進(jìn)制數(shù)字的位數(shù)。?
<climits>?提供與基本整數(shù)數(shù)據(jù)類型相關(guān)的C樣式定義。這些信息的C++樣式定義在<limits>中?
<cfloat>?提供與基本浮點(diǎn)型數(shù)據(jù)類型相關(guān)的C樣式定義。這些信息的C++樣式定義在<limits>中?
<cstdlib>?提供支持程序啟動(dòng)和終止的宏和函數(shù)。這個(gè)頭文件還聲明了許多其他雜項(xiàng)函數(shù),例如搜索和排序函數(shù),從字符串轉(zhuǎn)換為數(shù)值等函數(shù)。它與對(duì)應(yīng)的標(biāo)準(zhǔn)C頭文件stdlib.h不同,定義了abort(void)。abort()函數(shù)還有額外的功能,它不為靜態(tài)或自動(dòng)對(duì)象調(diào)用析構(gòu)函數(shù),也不調(diào)用傳給atexit()函數(shù)的函數(shù)。它還定義了exit()函數(shù)的額外功能,可以釋放靜態(tài)對(duì)象,以注冊(cè)的逆序調(diào)用用atexit()注冊(cè)的函數(shù)。清除并關(guān)閉所有打開的C流,把控制權(quán)返回給主機(jī)環(huán)境。?
<new>?支持動(dòng)態(tài)內(nèi)存分配?
<typeinfo>?支持變量在運(yùn)行期間的類型標(biāo)識(shí)?
<exception>?支持異常處理,這是處理程序中可能發(fā)生的錯(cuò)誤的一種方式?
<cstdarg>?支持接受數(shù)量可變的參數(shù)的函數(shù)。即在調(diào)用函數(shù)時(shí),可以給函數(shù)傳送數(shù)量不等的數(shù)據(jù)項(xiàng)。它定義了宏va_arg、va_end、va_start以及va_list類型?
<csetjmp>?為C樣式的非本地跳躍提供函數(shù)。這些函數(shù)在C++中不常用?
<csignal>?為中斷處理提供C樣式支持?

C2?支持流輸入/輸出的頭文件?頭文件??描述??
<?iostream>?支持標(biāo)準(zhǔn)流cin、cout、cerr和clog的輸入和輸出,它還支持多字節(jié)字符標(biāo)準(zhǔn)流wcin、wcout、wcerr和wclog。?
<iomanip>?提供操縱程序,允許改變流的狀態(tài),從而改變輸出的格式。?
<ios>?定義iostream的基類?
<istream>?為管理輸出流緩存區(qū)的輸入定義模板類?
<ostream>?為管理輸出流緩存區(qū)的輸出定義模板類?
<sstream>?支持字符串的流輸入輸出?
<fstream>?支持文件的流輸入輸出?
<iosfwd>?為輸入輸出對(duì)象提供向前的聲明?
<streambuf>?支持流輸入和輸出的緩存?
<cstdio>?為標(biāo)準(zhǔn)流提供C樣式的輸入和輸出?
<cwchar>?支持多字節(jié)字符的C樣式輸入輸出?

C3?與診斷功能相關(guān)的頭文件?頭文件?描述?
<stdexcept>?定義標(biāo)準(zhǔn)異常。異常是處理錯(cuò)誤的方式?
<cassert>?定義斷言宏,用于檢查運(yùn)行期間的情形?
<cerrno>?支持C樣式的錯(cuò)誤信息?

C4?定義工具函數(shù)的頭文件?頭文件?描述?
<utility>?定義重載的關(guān)系運(yùn)算符,簡(jiǎn)化關(guān)系運(yùn)算符的寫入,它還定義了pair類型,該類型是一種模板類型,可以存儲(chǔ)一對(duì)值。這些功能在庫(kù)的其他地方使用?
<functional>?定義了許多函數(shù)對(duì)象類型和支持函數(shù)對(duì)象的功能,函數(shù)對(duì)象是支持operator()()函數(shù)調(diào)用運(yùn)算符的任意對(duì)象?
<memory>?給容器、管理內(nèi)存的函數(shù)和auto_ptr模板類定義標(biāo)準(zhǔn)內(nèi)存分配器?
<ctime>?支持系統(tǒng)時(shí)鐘函數(shù)?

C5?支持字符串處理的頭文件?頭文件?描述?
<string>?為字符串類型提供支持和定義,包括單字節(jié)字符串(由char組成)的string和多字節(jié)字符串(由wchar_t組成)?
<cctype>?單字節(jié)字符類別?
<cwctype>?多字節(jié)字符類別?
<cstring>?為處理非空字節(jié)序列和內(nèi)存塊提供函數(shù)。這不同于對(duì)應(yīng)的標(biāo)準(zhǔn)C庫(kù)頭文件,幾個(gè)C樣式字符串的一般C庫(kù)函數(shù)被返回值為const和非const的函數(shù)對(duì)替代了?
<cwchar>?為處理、執(zhí)行I/O和轉(zhuǎn)換多字節(jié)字符序列提供函數(shù),這不同于對(duì)應(yīng)的標(biāo)準(zhǔn)C庫(kù)頭文件,幾個(gè)多字節(jié)C樣式字符串操作的?一般C庫(kù)函數(shù)被返回值為const和非const的函數(shù)對(duì)替代了。?
<cstdlib>?為把單字節(jié)字符串轉(zhuǎn)換為數(shù)值、在多字節(jié)字符和多字節(jié)字符串之間轉(zhuǎn)換提供函數(shù)?

C6?定義容器類的模板的頭文件?頭文件?描述?
<vector>?定義vector序列模板,這是一個(gè)大小可以重新設(shè)置的數(shù)組類型,比普通數(shù)組更安全、更靈活?
<list>?定義list序列模板,這是一個(gè)序列的鏈表,常常在任意位置插入和刪除元素?
<deque>?定義deque序列模板,支持在開始和結(jié)尾的高效插入和刪除操作?
<queue>?為隊(duì)列(先進(jìn)先出)數(shù)據(jù)結(jié)構(gòu)定義序列適配器queue和priority_queue?
<stack>?為堆棧(后進(jìn)先出)數(shù)據(jù)結(jié)構(gòu)定義序列適配器stack?
<map>?map是一個(gè)關(guān)聯(lián)容器類型,允許根據(jù)鍵值是唯一的,且按照升序存儲(chǔ)。multimap類似于map,但鍵不是唯一的。?
<set>?set是一個(gè)關(guān)聯(lián)容器類型,用于以升序方式存儲(chǔ)唯一值。multiset類似于set,但是值不必是唯一的。?
<bitset>?為固定長(zhǎng)度的位序列定義bitset模板,它可以看作固定長(zhǎng)度的緊湊型bool數(shù)組?

C7?支持迭代器的頭文件?頭文件?描述?
<iterator>?給迭代器提供定義和支持?

C8?有關(guān)算法的頭文件?頭文件?描述?
<algorithm>?提供一組基于算法的函數(shù),包括置換、排序、合并和搜索?
<cstdlib>?聲明C標(biāo)準(zhǔn)庫(kù)函數(shù)bsearch()和qsort(),進(jìn)行搜索和排序?
<ciso646>?允許在代碼中使用and代替&&?

C9?有關(guān)數(shù)值操作的頭文件?頭文件?描述?
<complex>?支持復(fù)雜數(shù)值的定義和操作?
<valarray>?支持?jǐn)?shù)值矢量的操作?
<numeric>?在數(shù)值序列上定義一組一般數(shù)學(xué)操作,例如accumulate和inner_product?
<cmath>?這是C數(shù)學(xué)庫(kù),其中還附加了重載函數(shù),以支持C++約定?
<cstdlib>?提供的函數(shù)可以提取整數(shù)的絕對(duì)值,對(duì)整數(shù)進(jìn)行取余數(shù)操作?

C10?有關(guān)本地化的頭文件?頭文件?描述?
<locale>?提供的本地化包括字符類別、排序序列以及貨幣和日期表示。?
<clocale>?對(duì)本地化提供C樣式支持?

轉(zhuǎn)載于:https://www.cnblogs.com/renyuan/archive/2013/05/30/3108626.html

總結(jié)

以上是生活随笔為你收集整理的c++标准库 及 命名空间std的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。