1. 程式人生 > >c++的列表初始化問題

c++的列表初始化問題

要初始化一個整型陣列為0的時候, 我們通常可以這樣寫

int num[100] {0};

但是初始化這個整型陣列為其他值的時候, 是否能這樣寫呢?

int num[100] {1};

printf列印下結果會發現是不可行的, 只有num[0]被初始化為1, 其他元素均為0.

那麼 為什麼寫0的時候就是對的呢?

原因是因為對於列表初始化而言, 當列表中的元素少於陣列元素的時候, 編譯器會將後面的元素全部填為0, 所以初始化為0其實就是將陣列的第一個元素初始化後, 利用編譯器的這個功能將剩餘的元素都初始化為0.

那麼要初始化為其他值的時候, 應該怎麼做?

  • 使用memset函式: memset函式是string.h中的一個函式, 其寫法是memset(point_of_begin, value, size_of_item_to_fill);
    這種方法的速度較快, 但是要注意到, 其初始化的時候是按位元組初始化, 因此, 通常只能用它來初始化整型陣列為-1和0
  • 使用fill函式, fill函式是algorithm中的一個函式, 其寫法是
#include<algorihtm>
fill(begin_point, end_point, value);

注意到, begin和end的區間是左閉右開, 同時, 這兩個值對於陣列來說是指標, 對於容器來說是迭代器, fill方法可以填充大多數資料型別,包括自定義的資料型別.