C++ primer閱讀筆記------------字符串,向量和數組

該博客用於記錄自己在閱讀過程中不懂的知識點,很少用到但比較重要的知識點以及模棱兩可的知識點
string.size() /length()返回值類型爲size_type 不是int(用auto類型來承載,無符號整型數)
string 比較運算符實際上是比較第一個相異的字符

多個字符串相加其中一個必須是string(不能兩個都爲字面值),連續相加與連續輸入輸出有相似之處


對每個字符操作: range for 如果要改變原串則需要引用


vector<int> v1(10);     //v1 10個元素,每個都被默認初始化

vector<int> v2 {10}   // v2 1個元素,初始化爲10
vector<int> v3 (10, 1)   //v3 10個元素每個都爲1
vector<int> v4{10, 1}   //v4 兩個元素10,1
通常來說圓括號用於構造容器的容量,花括號則可以理解爲列表初始化,但例外的情況是,如果花括號中的值不能用於列表初始化則會考慮用於構造容量, 如:
vector<string> v5{10}  //10顯然不是string類型,所以10被用於構造容量, v5是容量爲10的容器,默認初始化
同理:
vector<string> v6 {10, “a”} //v6 10個初始值爲“a”的元素
如果循環體裏面有向vector添加元素(非常高效,所以通常不指定vector大小)或改變容量的情況,則不能使用range for


iterator   //讀寫

const_iterator //只能讀
cbegin和cend返回const_iterator

不清楚元素個數,使用vector不使用數組


int (*ptr)[10] = &arr;    //ptr指向一個數組

int (&ptr)[10] = arr;    //ptr引用該數組
int *ptr[10];   //指針數組
int &ptr[10];     //錯誤!!!不存在引用數組
int a[] = {1, 2, 3};
auto pa(a);    //pa是指向a數組第一個元素的整型指針
decltype(a) a2={1, 1, 1};

int *b = begin(a);    //首元素指針
int *l = end(a);     //尾元素指針
兩指針相減的類型爲ptrdiff_t(代符號)類似size_type(不帶符號)是一種標準庫類型

如果要用字符數組給字符串賦值,則字符數組應該以空字符結尾

string對象的加法運算允許一個對象是空字符結尾的字符數組(不能2個都是)


當需要用string初始化c風格字符串時用c_str() 例:

const char *str = s.c_str();
然而如上這樣使用如果s發生改變str數組也會失去效用,因爲返回的是臨時指針,所以應當這樣使用strcp(str, s.c_str())
不能使用vector初始化數組,但可以用數組初始化vector,但須指明待拷貝區域的首地址和尾地址, 例:
vector<int> myvec(begin(arr), end(arr));

using int_arr = int[4];
typedef int int_arr[4];   //int_arr 即爲4個整數組成的數組的別名
發佈了37 篇原創文章 · 獲贊 34 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章