數(shù)組和vector的區(qū)別
數(shù)組的長(zhǎng)度固定玫芦。數(shù)組不提供size和push_back操作槽华。
數(shù)組的操作
用vector訪問元素時(shí)阅茶,下標(biāo)的類型是vector<T>::size_type,而數(shù)組下標(biāo)應(yīng)該是size_t吹榴。
迭代器和指針的區(qū)別
指針用于指向單個(gè)對(duì)象暖哨,而迭代器只能用于訪問容器內(nèi)的元素肌厨。指針是數(shù)組的迭代器培慌。
string s("hello world");
string *sp = &s;
vector<string> str(10,"hi!");
vector<string>::iterator iters =str.begin();
指針的操作
(1)定義和初始化:盡量初始化,若不指向某特定對(duì)象柑爸,則應(yīng)該賦給0值吵护。C語言中的預(yù)處理器變量NULL就是0值,定義在cstdlib頭文件中表鳍。
int ival = 1024; int *pi = &ival;
int *pi1 = 0;
int *pi2 = NULL;
int *pi3 = pi;
(2)void* 指針:表示該指針和一個(gè)地址值相關(guān)馅而,但不清楚存儲(chǔ)在此地址上的對(duì)象的類型。
(3)給指針賦值和通過指針進(jìn)行賦值:一個(gè)是通過指針修改指向地址上的元素值譬圣,一個(gè)是修改指針指向的地址瓮恭。
*sp = "Good Bye";
sp = &ival;
(4)引用和指針的區(qū)別:引用始終指向某個(gè)對(duì)象,定義時(shí)必須初始化胁镐。給引用賦值修改的是該引用所關(guān)聯(lián)的對(duì)象的值偎血。
int &ri = ival;int &ri2 = ival2;
ri = ri2;
(5)指向指針的指針:ppi指向指針變量pi的存儲(chǔ)地址,pi指向int變量ival的地址盯漂。對(duì)ppi取引用颇玷,即取出ppi指向的地址存放的變量值,即取出指針pi就缆。即pi2跟pi一樣也指向ival變量帖渠。
int ival = 1024; int *pi = &ival;
int **ppi = π
int *pi2 = *ppi;
(6)指向數(shù)組的指針:指向該數(shù)組的第一個(gè)元素ia[0]。若一個(gè)指針指向數(shù)組元素竭宰,則可以用下標(biāo)操作指針空郊。
int *p = &ia[2];
int j = p[1]; //ia[3],p[1] = *(p+1)
int k = p[-2];//ia[0]
5.指向const對(duì)象的指針:cptr本身是可以改變的,可以指向另一個(gè)const對(duì)象切揭。cptr指向的const對(duì)象不可以用*cptr來修改狞甚,cptr指向的非const對(duì)象可以用別的非const指針修改。cptr其實(shí)是自以為指向const對(duì)象的指針廓旬。
const double *cptr;
const指針
const指針本身的值不能修改哼审。但它指向的對(duì)象值可變,只是該指針始終指向一個(gè)地址。
int *const curErr = &ival;
指針和typedef
typedef string *pstring;//pstring是指向string類型的指針類型
const pstring cstr;//cstr是指向string類型對(duì)象的const指針
string *const cstr;
C風(fēng)格字符串
字符串字面值的類型就是const char類型的數(shù)組涩盾。并且以null作為結(jié)尾十气,自動(dòng)添加到末尾。標(biāo)準(zhǔn)庫:包含頭文件#include<cstring>春霍。
char ca1[] = {'C','+','+'};
char ca2[] = "C++";
char* cp = ca2;
char* cp = "C++";
數(shù)組類型的限制
數(shù)組長(zhǎng)度固定不變砸西,編譯時(shí)必須知道其長(zhǎng)度,數(shù)組只在定義它的塊語句中存在址儒。
動(dòng)態(tài)數(shù)組
在編譯時(shí)不知道數(shù)組長(zhǎng)度芹枷,要在程序運(yùn)行時(shí)才知道,因此需要?jiǎng)討B(tài)數(shù)組离福。
只需要指定類型和數(shù)組長(zhǎng)度杖狼,不需要命名數(shù)組,new分配空間返回的是指向數(shù)組的第一個(gè)元素的指針妖爷。這時(shí)new是在free store中分配了一塊內(nèi)存空間蝶涩,沒有名字,只能用它的地址間接訪問他絮识,而且這個(gè)數(shù)組會(huì)始終存在直到釋放他绿聘。如果不釋放,會(huì)使內(nèi)存耗盡次舌,導(dǎo)致內(nèi)存泄露熄攘。
int *pia = new int[10];
delete [] pia;
不允許用string對(duì)象初始化字符指針
但是提供了另外的成員函數(shù)c_str()
const char *str = st.c_str();
多維數(shù)組
就是數(shù)組的數(shù)組。ia[row][column],第一維是行彼念,第二位是列挪圾。
指針和多維數(shù)組:ia是指向第一個(gè)內(nèi)層數(shù)組的指針,即這里的ia不是指向一個(gè)元素而是指向一行元素逐沙,指向一個(gè)數(shù)組哲思。
int ia[3][4];
int (*ip)[4] = ia;//ip是一個(gè)指向含有4個(gè)元素的數(shù)組的指針
ip = &ia[2];//ia[2]是個(gè)指針,指向第三層內(nèi)層元素的指針