C primer 筆記 陣列 vector

2021-08-22 11:26:00 字數 4942 閱讀 8536

一、陣列

1、如果在函式內部定義了某種內建型別的陣列,則預設初始化會令陣列含有未定義的值。

2、定義陣列的時候必須指定陣列的型別,不允許用auto關鍵字由初始值的列表推斷型別。

3、陣列的元素應為物件,因此不存在引用的陣列。

4、可以對陣列的元素進行列表初始化,此時允許忽略陣列的維度。

5、不能將陣列的內容拷貝給其他陣列作為其初始值,也不能用陣列為其他陣列賦值。

6、允許定義陣列的指標及陣列的引用

int *ptr[10]; //ptr是含有10個整形指標的陣列

int &refs[10] = /?/; //錯誤:不存在引用的陣列

int (*parray)[10] = &arr; //parray指向乙個含有10個整數的陣列

int (&arrref)[10] = arr; //arrref引用乙個含有10個整數的陣列

由內向外,先左後右,左邊是型別

7、在使用陣列下標的時候,通常將其定義為size_t型別。

8、當陣列或其他類似資料結構的下標越界並試圖訪問非法記憶體區域時,就會產生緩衝區溢位錯誤。

9、對陣列的元素使用取位址符&就能得到指向該元素的指標;

在用到陣列名字的時候,編譯器都會自動地將其替換為乙個指向陣列首元素的指標;因此在大多數表示式中,使用陣列型別的物件其實是使用乙個指向該陣列首元素的指標。

當使用陣列作為乙個auto變數的初始值時,推斷得到的型別是指標而非陣列;

當使用decltype關鍵字時上述轉換不會發生,decltype返回的型別是由10個整數構成的陣列。

10、使用begin和end可以很容易的寫出乙個迴圈並處理陣列中的元素。

int ia=;

int *beg = begin(ia); //指向ia首元素的指標

int *last = end(ia); //指向ia尾元素的下一位置的指標,尾後指標不能執行解引用和遞增操作;

eg:找到arr中的第乙個負數

int *pbeg = begin(arr), *pend = end(arr);

while (pbeg != pend && *pbeg >=0) ///將其解引用並檢查元素值是否為負值。

++pbeg;

11、兩個指標相減的結果是他們之間的距離,型別是一種名為ptrdiff_t的標準庫型別。

12、

int main()

; int i = ia[2];

cout << i << endl;

int*p = ia;

cout << *p

<< endl;

i = *(p + 2);

cout << i << endl;

int*q = &ia[2]; //q指向索引為2的元素

cout << *q

<< endl;

int j = q[1]; //q[1]等價於*(

q+1),就是ia[3]表示的那個元素

cout << j << endl;

int k = q[-2];

cout << k << endl;

}

13、c_str函式的返回值是乙個c風格的字串,也就是說,函式的返回結果是乙個指標,該指標指向乙個以空字元結束的字元陣列。

string s(「hello world」);

const char *str = s.c_str();

14、 不允許使用vector物件初始化陣列,但允許使用陣列來初始化vector物件,只需指明要拷貝區域的首元素位址和尾後位址就可以了

int int_arr = ;

vector ivec(begin(int_arr),end(int_arr));

15、當陣列的大小未知時,需要動態宣告一維陣列,宣告格式如下:

int* a=new int[n];

當陣列使用完畢時,需要使用:

delete a;

釋放記憶體空間。

16、多維陣列其實是陣列的陣列,第乙個維度稱作行,第二個維度稱作列。

int a[3][4];

大小為3的陣列,每個元素是含有4個整數的陣列;

17、要使用範圍for語句處理多維陣列,除了最內層的迴圈外,其他所有迴圈的控制變數都應該是引用型別。

int main()

; //輸出ia中每個元素的值,每個內層陣列各佔一行

//p指向含有4個整數的陣列

for (auto &row : ia)

for (auto &col : row)

cout

<< col << " ";

}

18、

int main()

; //輸出ia中每個元素的值,每個內層陣列各佔一行

//p指向含有4個整數的陣列

for (auto p = ia; p != ia + 3; ++p)

//q指向4個整數陣列的首元素,也就是說,q指向乙個整數

for (auto q = *p; q != *p + 4; ++q)

cout

<< *q << " ";

cout

<< endl;

}

或者

int main()

; //輸出ia中每個元素的值,每個內層陣列各佔一行

//p指向含有4個整數的陣列

for (auto p = begin(ia); p != end(ia); ++p)

//q指向4個整數陣列的首元素,也就是說,q指向乙個整數

for (auto q = begin (*p); q != end(*p) ; ++q)

cout

<< *q << " ";

cout

<< endl;

}

19、c++規定,在宣告和初始化乙個二維陣列時,如果對二維陣列的所有元素賦值,則第一維(行)可以省略,但注意第二維不能省略。

20、乙個二維陣列元素a[x][y]在一維陣列b中,是

a[x][y]=b[x*列數+y];

21、二維陣列的動態宣告

int *a=new int [m];

for(int i=0;i

int strlen(cosnt char *str)
34、memcpy

void *memcyp(void *dest,const void *src,size_t n);

從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體位址的起始位置中。函式返回指向dest的指標。

35、memset

void *memset(void *s, int ch, size_t n);

將s中前n個位元組用ch替換並返回s,作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法。

36、如果ar是陣列名,則表示式ar[i]被解釋為*(ar+i).

37、陣列的兩個特殊性質:不允許拷貝陣列,使用陣列時通常會將其轉換成指標

二、vector

1、標準庫型別vector表示物件的集合,其中所有物件的型別都相同,也被稱為容器

2、要想使用vector,必須包含適當的標頭檔案。

using std::vector;

3、編譯器根據模板建立類或函式的過程稱為例項化

4、vector能容納絕大多數型別的物件作為其元素,但是因為引用不是物件,所以不存在包含引用的vector。

5、如果提供的是初始元素值的列表,則只能把初始值都放在花括號裡進行列表初始化,而不能放在圓括號裡。

6、如果用的是圓括號,可以說提供的值是用來構造vector物件的

vector v1(10);//v1有10個元素,每個的值都是0

vector v2(10,1);//v2有10個元素,每個的值都是1

如果用的是花括號,可以表述成我們想列表初始化該vector物件。

vector v3;//v3有1個元素,該元素的值是0

vector v1;//v4有2個元素,值分別是10和1

7、如果初始化時使用了花括號的形式但是提供的值又不能用來列表初始化,就要考慮用這樣的值來構造vector物件了

vector v5;//v5有10個預設初始化的元素。

vector v6(「hi」);//錯誤,不能用字串字面值構建vector物件,花括號則正確

8、vector的成員函式push_back負責把乙個值當成vector物件的尾元素「壓到(push)」vector物件的「尾端(back)」。

vector v2;

for(int i=0;i != 100;++i)

v2.push_back(i);

9、如果迴圈體內部包含有向vector物件新增元素的語句,則不能使用範圍for迴圈。(範圍for語句體內不應改變其所遍歷序列的大小)。

10、要使用size_type,需首先指定它是由哪種型別定義的。vector物件的型別總是包含著元素的型別

vector::size_type //正確

vecotr::size_type //錯誤

11、vector物件的下標也是從0開始計起,不能用下標形式新增元素。

12、vector物件(以及string物件)的下標運算子可用於訪問已存在的元素,而不能用於新增元素。

13、確保下標合法的一種有效手段就是盡可能使用範圍for語句。

14、array長度固定,使用棧(靜態記憶體分配);要建立array物件,需要包含標頭檔案array。

array

Swift筆記 陣列

建立乙個空陣列 使用構造語法來建立乙個由特定資料型別構成的空陣列 var array int print array.count count 通過建構函式的型別,array的值型別被推斷為 int 建立乙個帶有預設值的陣列 swift 中的array型別還提供乙個可以建立特定大小並且所有資料都被預設...

PHP筆記,陣列

1.php有兩種陣列 索引陣列 關聯陣列。索引和關聯兩個詞都是針對陣列的鍵而言的 1 索引陣列是指數組的鍵是整數的陣列,並且鍵的整數順序是從0開始,依次類推。索引陣列的初始化 fruit array 蘋果 香蕉 菠蘿 2 關聯陣列是指數組的鍵是字串的陣列。可以使用 print r 陣列名 語句輸出陣...

java筆記 陣列

陣列 1 是一種資料型別 應用型別 2 相同資料型別元素的集合 3 陣列的定義 資料型別 資料名 new 資料型別 大小 int a 宣告整型變數 int a 宣告整型陣列變數 int a 5 int new int 5 宣告整型陣列a,包含5個元素 每個元素都是int型別,預設值為0 double...