size_type:
由string類型別和vector類型別定義的型別,用以儲存任意string物件或vector物件的長度,標準庫型別將size_type定義為unsigned型別
string抽象意義是字串, size()的抽象意義是字串的尺寸, string::size_type抽象意義是尺寸單位型別
string::size_type它在不同的機器上,長度是可以不同的,並非固定的長度。但只要你使用了這個型別,就使得你的程式適合這個機器。與實際機器匹配。
eg:string::size_type從本質上來說,是乙個整型數。關鍵是由於機器的環境,它的長度有可能不同。 例如:我們在使用 string::find的函式的時候,它返回的型別就是 string::size_type型別。而當find找不到所要找的字元的時候,它返回的是 npos的值,這個值是與size_type相關的。假如,你是用 string s; int rc = s.find(.....); 然後判斷,if ( rc == string::npos ) 這樣在不同的機器平台上表現就不一樣了。如果,你的平台的string::size_type的長度正好和int相匹配,那麼這個判斷會僥倖正確。但換成另外的平台,有可能 string::size_type的型別是64位長度的,那麼判斷就完全不正確了。 所以,正確的應該是: string::size_type rc = s.find(.....); 這個時候使用 if ( rc == string::npos )就回正確了。
st.size()表示st中的字元數量,字元數量的統計是由 1 開始累計計算的,所以字元數量正好比字串的下標索引數(由 0 開始累計計算)大 1 ,這裡的index != st.size();的效果等同於index < st.size();
size_t
size_t不是容器概念。
size_type是容器概念,沒有容器不能使用。
見例程:
[cpp]view plain
copy
#include
#include
using
namespace
std;
intmain()
from:
先是看到了在看標準庫string時size_type,後來在學習標準庫bitset的時候有碰到了size_t,暈啊
先說說是在什麼樣的機緣巧合下與size_type相遇的吧,o(∩_∩)o
標準庫string裡面有個函式size,用來返回字串中的字元個數,具體用法如下:
string st("the expense of spirit/n");
cout << "the size of "<<< "characters, including the newline"《那麼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哦
from:網友
[cpp]view plain
copy
class
container
;
C 中size t 和 size type的區別
為了使自己的程式有很好的移植性,c 程式設計師應該盡量使用size t和size type而不是int,unsigned 1.size t是全域性定義的型別 size type是stl類中定義的型別屬性,用以儲存任意string和vector類物件的長度 2.string size type 制型別...
c 中size t和size type之間的關係
之前一直很迷惑size t和size type有什麼區別,後來專門去網上查了查,現在終於明白區別了。為了使自己的程式有很好的移植性,在程式編寫的時候應該盡量使用size t和size type。其主要有一下幾點區別 1.size t是全域性定義的型別 size type是stl類中定義的型別屬性。在...
Vector 中size和 capacity的區別
size是指容器當前擁有元素的個數,而capacity是指容器在必須分配新的儲存空間之前可以存放的元素總數。如vectorivect 10 ivect.capacity 10,ivect.size 0,當你向ivect中插入元素時,只要沒有超過十個,那麼capacity就不變,而size為你插入的元...