C++語言提供了豐富的數(shù)據(jù)類型,例如基本數(shù)據(jù)類型、復(fù)合數(shù)據(jù)類型和標(biāo)準(zhǔn)庫提供的數(shù)據(jù)類型等,以適應(yīng)不同的編程需求和數(shù)據(jù)組織方式。本篇教程主要介紹C++中常見的數(shù)據(jù)類型及其應(yīng)用,幫助大家更好地理解和應(yīng)用C++編程語言。
一、基本數(shù)據(jù)類型
1、整型(int)
整型是C++中最基本的數(shù)據(jù)類型之一,用于表示整數(shù)值。根據(jù)平臺(tái)的不同,整型可以分為“”int“”、“”short“”、“”long“”等類型,其范圍和存儲(chǔ)大小也各有不同。整型在日常編程中廣泛應(yīng)用于計(jì)數(shù)、索引等場(chǎng)景。
C++語言的整數(shù)常量有三種形式:十進(jìn)制、八進(jìn)制、十六進(jìn)制。
(1)十進(jìn)制整數(shù)是由不以0開頭的0~9的數(shù)字組成的數(shù)據(jù)。
(2)八進(jìn)制整數(shù)是由以0開頭的0~7的數(shù)字組成的數(shù)據(jù)。
(3)十六進(jìn)制整數(shù)是由以0x或0x開頭的0~9的數(shù)字及A~F的字母(大小寫字母均可)組成的數(shù)據(jù)。
例如:
- 0,63,83是十進(jìn)制數(shù);
- 00,077,0123是八進(jìn)制數(shù);
- 0x0,Ox0,0x53,0x53,0x3f,0x3f是十六進(jìn)制數(shù)。
整數(shù)常量的取值范圍是有限的,它的大小取決于此類整型數(shù)的類型,與所使用的進(jìn)制形式無關(guān)。
2、浮點(diǎn)型(float、double)
浮點(diǎn)數(shù)常量:
浮點(diǎn)數(shù)是帶有小數(shù)的十進(jìn)制數(shù),可用一般表示法或科學(xué)記數(shù)法表示。0.23f、0.7e-3都是c++語言的浮點(diǎn)數(shù)常量。
(1)一般表示法:十進(jìn)制整數(shù)+小數(shù)點(diǎn)+十進(jìn)制小數(shù)。
(2)科學(xué)記數(shù)法:十進(jìn)制整數(shù)+小數(shù)點(diǎn)+十進(jìn)制小數(shù)+E(或e)+正負(fù)號(hào)+指數(shù)。
例如:3.14159,0.567,9777.12是一般表示法形式,1.234e5,4.90867e-2是科學(xué)記數(shù)法形式。
C++語言的浮點(diǎn)數(shù)常量在機(jī)器中有單精度和雙精度之分。單精度以32位形式存放,用f/F做后綴標(biāo)記(可以省略);雙精度則以64位形式存放。當(dāng)一個(gè)浮點(diǎn)數(shù)常量沒有特別指定精度時(shí),則它為雙精度浮點(diǎn)數(shù)常量。
浮點(diǎn)變量類型:
浮點(diǎn)變量也稱實(shí)數(shù)變量,用于需要精確到小數(shù)的函數(shù)運(yùn)算中,有float和double兩種類型說明符。
(1)float類型
float類型是一個(gè)位數(shù)為32位的單精度浮點(diǎn)數(shù)。它具有運(yùn)行速度較快,占用空間較少的特點(diǎn)。
(2)double類型
double類型是一個(gè)位數(shù)為64的雙精度浮點(diǎn)數(shù)。雙精度數(shù)在某些具有優(yōu)化和高速運(yùn)算能力的現(xiàn)代處理機(jī)上運(yùn)算比單精度數(shù)快。雙精度類型double比單精度類型float具有更高的精度和更大表示范圍。
3、字符型(char)
(1)字符型常量
字符型常量是指由單引號(hào)括起來的單個(gè)字符。例如:’a’,’A’,’z’,‘$’,’?’。
注意:’a’和’A’是兩個(gè)不同的字符常量。除了以上形式的字符常量外,c++語言還允許使用一種以“\”開頭的特殊形式的字符常量。這種字符常量稱為轉(zhuǎn)義字符,用來表示一些不可顯示的或有特殊意義的字符。
(2)字符型變量
字符型變量的類型說明符為char,它在機(jī)器中占8位,其范圍為0~255。
4、布爾型(bool)
布爾型只有兩個(gè)取值:“”true“”和“”false“”,用于表示邏輯值。布爾型在條件判斷、循環(huán)控制等場(chǎng)景中廣泛應(yīng)用。
二、復(fù)合數(shù)據(jù)類型
1、數(shù)組(array)
數(shù)組是一組按順序排列的同類型元素的集合,它們?cè)趦?nèi)存中占用連續(xù)的空間。數(shù)組的每個(gè)元素都可以通過索引來訪問,索引從0開始。數(shù)組的大小在聲明時(shí)必須是固定的,但在C++11及以后的版本中,可以使用變長(zhǎng)數(shù)組(VLA)或std::array來創(chuàng)建大小可變的數(shù)組。
2、結(jié)構(gòu)體(struct)
結(jié)構(gòu)體是一種用戶定義的數(shù)據(jù)類型,它可以包含不同類型的成員,如整型、浮點(diǎn)型、字符型、數(shù)組、指針以及其他結(jié)構(gòu)體等。結(jié)構(gòu)體用于將相關(guān)的數(shù)據(jù)組合在一起,以便于管理。例如,可以定義一個(gè)包含姓名、年齡和地址的結(jié)構(gòu)體來表示一個(gè)人的信息。
3、枚舉類型(enum)
枚舉類型允許我們?yōu)橐唤M整數(shù)值創(chuàng)建符號(hào)名稱,這樣可以提高代碼的可讀性和可維護(hù)性。枚舉常用于表示一組有限的選項(xiàng),如一周的天數(shù)、一年的季節(jié)、顏色的集合等。
4、指針(pointer)
指針是一個(gè)存儲(chǔ)變量地址的數(shù)據(jù)類型。通過指針,我們可以間接訪問和操作內(nèi)存中的數(shù)據(jù)。指針在C++中非常重要,它們用于動(dòng)態(tài)內(nèi)存分配、函數(shù)參數(shù)傳遞、構(gòu)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹等),以及實(shí)現(xiàn)引用語義等。
三、標(biāo)準(zhǔn)庫
標(biāo)準(zhǔn)庫提供的數(shù)據(jù)類型:
1、字符串(string)
std::string 是一個(gè)表示字符串的類,它提供了豐富的操作和方法來處理字符串,如連接、比較、搜索、提取子字符串等。std::string 自動(dòng)管理內(nèi)存,使得字符串操作更加安全和方便。
2、向量(vector)
std::vector 是一個(gè)動(dòng)態(tài)數(shù)組,可以在運(yùn)行時(shí)自動(dòng)調(diào)整大小。它提供了快速的隨機(jī)訪問,以及在末尾高效地添加和刪除元素的能力。
3、映射(map)
std::map 是一個(gè)排序的關(guān)聯(lián)容器,它存儲(chǔ)鍵值對(duì),并允許快速查找任何給定鍵對(duì)應(yīng)的值。std::map 內(nèi)部通常是紅黑樹實(shí)現(xiàn)的,因此鍵值對(duì)會(huì)按照鍵的順序進(jìn)行排序。
4、隊(duì)列(queue)
std::queue 是一個(gè)容器適配器,它將隊(duì)列的行為應(yīng)用于底層容器(如std::deque),提供了先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)。
5、棧(stack)
std::stack 同樣是一個(gè)容器適配器,它提供了后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),適用于需要棧操作的場(chǎng)景。
56std::list 是一個(gè)雙向鏈表,它允許在任何位置高效地插入和刪除元素。與std::vector不同,std::list在插入和刪除時(shí)不需要移動(dòng)元素。
6、集合(set)
std::set 是一個(gè)不包含重復(fù)元素的集合,它內(nèi)部通常由紅黑樹實(shí)現(xiàn),提供了快速的插入、刪除和查找操作。
7、雙端隊(duì)列(deque)
std::deque 是一個(gè)雙端隊(duì)列,允許在兩端高效地插入和刪除元素。
8、優(yōu)先隊(duì)列(priority_queue)
std::priority_queue 是一個(gè)堆容器,提供了基于優(yōu)先級(jí)的元素訪問。
9、無序集合(unordered_set) 和 無序映射(unordered_map)
std::unordered_set 和 std::unordered_map 是基于哈希表實(shí)現(xiàn)的,它們提供了平均常數(shù)時(shí)間復(fù)雜度的插入、刪除和查找操作。
C++提供了豐富多樣的數(shù)據(jù)類型,涵蓋了基本數(shù)據(jù)類型、復(fù)合數(shù)據(jù)類型以及標(biāo)準(zhǔn)庫提供的數(shù)據(jù)類型。程序員可以根據(jù)需求選擇合適的數(shù)據(jù)類型,以實(shí)現(xiàn)各種復(fù)雜的算法和數(shù)據(jù)結(jié)構(gòu)。熟練掌握這些數(shù)據(jù)類型,將有助于提高編程效率和代碼質(zhì)量。