字串
1.幾個特殊的資料類型
string s(“Hello”);
s.size()==6 string::size_type (unsigned type)
int *p1,*p2;
ptrdiff_t n = p1 – p2; //指標的差
#include<cstddef>
ptrdiff_t (signed int)
vector 下標類型 vector::size_type
string 下標類型 string::size_type
數組下標類型 size_t
2.字串與數組
string s1,s2=”Hello”;
s1 = s2; // 字串可以直接賦值
int ia[] = {0, 1, 2};
int ia2[3];
ia2 = ia; //數組不可以
3.動態數組
size_t n = get_size(); //允許動態分配空數組 get_size()運行時才知道值
int* p = new int[
n];
string *psa = new string[10]; //string不是內建類型,分配了記憶體,初始化了元素
int *pia = new int[10]; //int是內建類型,分配了記憶體,不初始化元素 (所以const類型時則有錯)
int *pia = new int[10](); // 強制要求編譯器初始化
4.C風格字串
#include<cstdlib>
int *pi = NULL; // NULL是C 風格
#incldue<cstring>
strlen(s) strcmp(s1,s2)….
char ca[] = {‘c’, ‘+’, ‘+’};
strlen(ca);//危險 strlen根據字串結束符null來判斷結尾
5.const與指標
C++強制要求指向const對象的指標也必須具有const特性,但允許把非const對象的地址賦給指向const對象的指標。
const double pi = 3.14;
double *ptr = π //錯誤
double dval = 3.14;
const double *cptr;
cptr = &dval //正確 所以可以個性const指標指向對象的值
6.自增操作區別
i ++; // 需要儲存原來的i值
++ i; // 所做的工作更少
vector<int> ivec;
int cnt = 10;
while(cnt>0)
ivec.pust_back(cnt--);
vector<int>::iterator iter = ivec.begin();
while(iter != ivec.end())
cout << *iter++ <<endl; // *iter++ ó *(iter++)
7.箭頭操作符 ->
C++為在點操作符後使用的解引用操作定義的同義字.
(*p).foo; ó p->foo;
8.sizeof操作符
對數組進行sizeof操作等效於將對其元素類型做sizeof操作的結果乘上數組元素的個數
int sz = sizeof(ia)/sizeof(*ia);//取數組元素個數