string st("the expense of spirit\n");
cout << "the size of "<
那麼size()
這個函式返回的型別? 一定要記住,絕對不是整形,而是
size_type
型別的,所以千萬不要把
size
的返回值賦給乙個
int變數。 那麼
size_type
到底是一種什麼樣的型別呢?
string
類型別和許多其他庫型別都定義了一些配套型別(
companion type)。
通過這些配套型別,庫型別的使用就能與機器無關。
size_type
就是這些配套型別中的一種。
size_type
被定義為與
unsigned
型(unsigned int, unsigned long
)具有相同的含義,而且可以保證足夠大能夠儲存任意
string
物件的長度。為而來使用由
string
型別定義的
size_type
型別。程式設計師必須加上作用於操作符來說明所使用的
size_type
型別是由
string
類定義的。
我們為什麼不適用int變數來儲存string的size呢?
使用int
變數的問題是:有些機器上的
int變數的表示範圍太小,甚至無法儲存實際並不長的
string
物件。如在有16位
int型的機器上,
int型別變數最大只能表示
32767
個字元的
string
物件。而能容納乙個檔案內容的
string
物件輕易就能超過這個數字,因此,為了避免溢位,儲存乙個
string
物件的size
的最安全的方法就是使用標準庫型別
string
::size_type().
一點注意:
雖然是在學習標準庫
string
的時候巧遇了
size_type
型別,但是,其實
vector
庫也可以定義
size_type
型別,在
vector
庫中還有乙個
difference_type
型別,該型別用來儲存任何兩個迭代器物件間的距離,所以是
signed
型別的。
什麼是size_t型別呢?其實本質上和size_type沒有多大區別
其實size_t
和size_type
類似,size_t
型別定義在
cstddef
標頭檔案中
,該檔案是
c標準庫的標頭檔案
stddef.h
的c++版本.
它是乙個與機器相關的
unsigned型別,
其大小足以保證儲存記憶體中物件的大小。用法如下:
bitset<32> bitvec;
size_t sz=bitvec.size(); 另外
sizeof
操作符的返回值的型別也為
size_t
**:
size t 與size type的使用
size t 是為了方便系統之間的移植而定義的 在32位系統上 定義為 unsigned int 在64位系統上 定義為 unsigned long 更準確地說法是 在 32位系統上是32位無符號整形 在 64位系統上是64位無符號整形 2.size t是無符號整形,平常用的時候沒有覺得有什麼問題,...
c 中size type和size t的關係
size type 由string類型別和vector類型別定義的型別,用以儲存任意string物件或vector物件的長度,標準庫型別將size type定義為unsigned型別 string抽象意義是字串,size 的抽象意義是字串的尺寸,string size type抽象意義是尺寸單位型別...
C 中size t 和 size type的區別
為了使自己的程式有很好的移植性,c 程式設計師應該盡量使用size t和size type而不是int,unsigned 1.size t是全域性定義的型別 size type是stl類中定義的型別屬性,用以儲存任意string和vector類物件的長度 2.string size type 制型別...