C 學習筆記1 size家族有關的種種雜記

2021-06-22 01:53:19 字數 2624 閱讀 5151

陸陸續續的學習c++,可以說是小白,也只是把c++ primer中的內容照搬過來當成乙個總結。

1:string的size操作

首先翻閱到跟size有關的c++primer書中記載的是string的size操作。

書中提到:size用來獲取string物件的長度

e.g.

int main

()

簡單的說呢:這地方的size就是size(),這是乙個」函式「,就是乙個獲取長度的乙個操作。

那基本上從廣義上來說,是乙個函式,就應該有返回型別,即使是void(姑且把它當做一種返回型別,叫法錯誤,只是便於理解),

由於有返回型別便再次延伸出了個string::size_type的型別。

對於這裡的size_type

讀著讀著,然後在vector物件的size裡面又看到,丫的說明了:使用size_type時,必須指出該型別在哪定義的。

vector::size_type

什麼地方可以用它呢?當我們遍歷容器內元素的時候,是不是要用到長度啊?用到了長度是不是有size操作,那這種型別就有用途了。

2.標準庫中bitset中的size

簡單的囉嗦下:標準庫提供了bitset類簡化了位集的操作。bitset的物件也有關於size的操作:b.size()【b中二進位制位的個數】

3.sizeof 操作符

sizeof操作符的作用是返回乙個物件或型別名的長度。

【尼瑪,是不是太熟悉了,這丫的不就是size(),可是人家是函式,你丫是操作符啊!!!】

操作符?操作符?操作符?  操作?size()也是操作啊?那就有返回型別:size_t。

請問size_t和size_type有嘛關係啊?是不是同乙個人啊?尼瑪,我才學啊,我哪知道。

描述:sizeof有三種語法方式:

sizeof

(type name);

sizeof

(expr);

sizeofexpr;

什麼是size_t型別呢?其實本質上和size_type沒有多大區別

其實size_t和size_type類似,size_t型別定義在cstddef標頭檔案中,該檔案是c標準庫的標頭檔案stddef.h的c++版本.它是乙個與機器相關的unsigned型別,其大小足以保證儲存記憶體中物件的大小

簡單的說size_t 沒有容器的概念,size_type有容器的概念。

後期更新:更新的內容是源於面試中關於sizeof的考察問題,在這地方進行乙個說明和總結:

上述所涉及到以下幾種型別:

(1)char * ss1 是乙個字元指標,對於乙個字元指標而言,指標的大小事4個位元組,所以sizeof(ss1)是4個位元組

(2)char ss2是乙個字元陣列,陣列最初沒有指定大小,那麼就由其填充的填充值來決定,於是10個字元占用十個位元組,再加上隱含的「\0」,所以式11個位元組。

(3)char ss3[100],陣列最初指定了100個位元組的大小 所以是100;

(4)ss4是整型陣列,也是分配了100,由於每個整型變數佔4個位元組,所以大小總共是400位元組。

(5)q1與ss2類似,占用4個位元組

(6)q2裡面\n算乙個位元組,所以總共是3個位元組

(7)q3是字元指標,指標的大小是定值,佔4個自己

(8)(9)這主要考察的是結構體的長度問題。關於結構體長度的問題,在預設情況下,為了方便結構體內元素的訪問和管理,當結構體內的元素長度都小於處理器的位數的時候,便以結構體裡面最長的資料元素為對齊單位,也就是說結構體的長度一定是最長的資料元素的整數倍。如果結構體內存在長度大於處理器位數的元素,那麼就以處理器的位數為對齊單位。

所以sizeof(a)而言,結構體a中有3個short型別變數,各自取2位元組對齊,結構體對齊引數按預設的8位元組對齊,則a1、a2、a3都去2位元組對齊,sizeof(a)為6,其也是2的整數倍。

b中a1為4位元組對齊,a2為2位元組對齊,結構體大小為6位元組,6不是4的整數倍,補空位元組,增到8時,符合條件。所以sizeof(b)為8

(這地方其實涉及到了cpu優化和記憶體對齊的問題。關於記憶體中資料對齊的問題,在之後的章節會詳

細介紹。另外對於不同資料型別占用多少位元組的問題,也會在之後的章節中詳細介紹。)

4:關於容器等size操作

關於容器等相關的一些size操作再此就不贅述了,簡單以順序容器中對容器大小的操作位例來說:

其返回型別都是size_type型別:c.size/c.max_size/等,這些具體的一些操作在實際運用中使用而已

有關c 的學習筆記整理與心得

array 的容量是固定的,而 arraylist 的容量是根據需要自動擴充套件的。arraylist 提供新增 插入或移除某一範圍元素的方法。arraylist就是傳說中的動態陣列,用msdn中的說法,就是array的複雜版本,它提供了如下一些好處 動態的增加和減少元素 實現了icollectio...

C 學習筆記(1)

1.類和結構體的區別 區別在於訪問控制方面,對於結構體而言,所有成員預設都是public,即在外部可以訪問,對於類來說,預設條件下成員函式都是private,不能被外部訪問。2.c 中的建構函式 建構函式最重要的作用是建立物件本身。c 規定,每個類必須有乙個建構函式,沒有它,就不能建立任何物件。乙個...

C 學習筆記1

一,類的最基本的函式 乙個類至少有預設建構函式,拷貝建構函式,拷貝構造運算子,和析構函式四個最基本的函式,在下面的例子中將對這些函式進行講解。如下 includeusing namespace std class superone superone superone void superone se...