c 中有關size type的問題

2021-06-29 16:42:31 字數 2512 閱讀 8211

sizt_t是

c++的乙個標準的

typedef.

全域性有效,定義在全域性命名空間中

size_type是

stl定義的,只在

namespace std

中有效vc6中定義

size_t

為typedef unsigned int size_t

size_type應該是

c++為例如

string

類和許多其他庫型別定義的配套型別

,使這些庫型別的使用與機器無關

,一般定義為

unsigned型別(

例如unsigned int unsigned long)

用法如下:

容器名字

::size_type

std::string::size_type index

是string 

型別中的

size_type 

型別是一種整型

一般用於陣列大小

string[std::string::size_type]

string::size_type型別

從邏輯上來講,size()

成員函式似乎應該返回整型數值,或如

2.2節「建議

」中所述的無符號整數。但事實上,

size

操作返回的是

string::size_type

型別的值。我們需要對這種型別做一些解釋。

string類型別和許多其他庫型別都定義了一些夥伴型別(

companion types

)。這些夥伴型別使得庫型別的使用是機器無關的

(machine-independent)

。size_type

就是這些夥伴型別中的一種。它定義為與

unsigned

型(unsigned int

或unsigned long

)具有相同的含義,而且可以保證足夠大可儲存任意

string

物件的長度。為了使用由

string

型別定義的

size_type

型別,程式設計師必須加上作用域操作符來說明所使用的

size_type

型別是由

string

類定義的。

任何儲存string

的size

操作結果的變數必須為

string::size_type

型別。特別重要的是,不要把

size

的返回值賦給乙個

int變數。

雖然我們不知道string::size_type

的確切型別,但可以知道它是

unsigned

型(2.1.1

節)。對於任意一種給定的資料型別,它的

unsigned

型所能表示的最大正數值比對應的

signed

要大一倍。這個事實表明

size_type

儲存的string

長度是int

所能儲存的兩倍。

使用int

變數的另乙個問題是,有些機器上

int變數的表示範圍太小,甚至無法儲存實際並不長的

string

物件。如在有16位

int型的機器上,

int型別變數最大只能表示

32767

個字元的

string

物件。而能容納乙個檔案內容的

string

物件輕易就會超過這個數字。因此,為了避免溢位,儲存乙個

string

物件size

的最安全的方法就是使用標準庫型別

string:: size_type

。string類型別和許多其他庫型別都定義了一些配套型別(

companion type

)。通過這些配套型別,庫型別的使用就能和機器無關(machine-independent

)。string::size_type

定義為unsigned

型,可以保證足夠大的儲存

string

物件的長度。

注意,任何儲存string

的size

操作結果的變數必須為

string::size_type

型別。尤其不能把

size

的返回值賦給乙個

int變數。(因為

size

返回的是乙個

unsigned

型別,而

int是

signed

型別。size

能表達的大小是

int的

2倍)。

string str("some string");   //通過字串字面值賦值給串

for (string::size_type ix = 0; ix != str.size(); ++ix)   //此處不該為

int     用!=

,而不用

<=

C 中 有關迭代器失效的問題

對於順序容器,對其新增或者刪除元素,會有迭代器失效的情況。首先是erase,刪除的情況。假如刪除了,進行it 是肯定會報錯的 對於erase,會返回下乙個迭代器,避免失效。iter cont.erase iter 關聯容器,只需要 map iterator tmpiter iter iter dat...

面試中有關C 的若干問題

面試中有關c 的若干問題 by 晴天,2014.5.16晚 什麼是多型?簡要說一下c 中的多型的概念。1 定義 多型是指相同物件收到不同訊息或者不同物件收到相同訊息產生不同的行為。2 c 中多型分為兩種 a 編譯時多型 靜態繫結 通過函式過載來實現 b 執行時多型 動態繫結 通過虛函式來實現 動態繫...

python中有關賦值的問題

眾所周知,python的賦值和一般的高階語言的賦值有很大的不同,它是引用賦值。看下面的 1 a 5 b 8 a b 結果如下圖1 圖1開始的時候a指向的是5,b指向的是8,當a b的時候,b把自己指向的位址 也就是8的記憶體位址 賦給了a,那麼最後的結果就是a和b同時指向了8。我們可以用python...