string.size() /length()返回值類型爲size_type 不是int(用auto類型來承載,無符號整型數)
string 比較運算符實際上是比較第一個相異的字符
多個字符串相加其中一個必須是string(不能兩個都爲字面值),連續相加與連續輸入輸出有相似之處
vector<int> v1(10); //v1 10個元素,每個都被默認初始化
vector<int> v2 {10} // v2 1個元素,初始化爲10vector<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個整數組成的數組的別名