C 學習筆記

2022-08-05 14:45:11 字數 2250 閱讀 3894

//將字串s全變為大寫

for(char &i : s)

範圍for語句是c++11標準,用g++編譯時,需要加上-std=c++11,不然會提示range-based ‘for’ loops are not allowed in c++98 mode範圍for迴圈相對於傳統for迴圈和while迴圈的優點是,我們無需關心迴圈邊界條件,防止越界訪問。

string temp;

while(cin >> temp)

用cin輸入字串,cin會忽略輸入流中的空白(空格符、換行符、製表符等),將連續的字元提取出來。例如輸入分隔開的”hello world!”,實際會進入兩次while,temp先是”hello”,再是”world!”

string temp;

while(getline(cin, temp)

用getline()輸入字串,可保留輸入時的空白符。getline()在遇到換行符時會返回,返回時,不會將換行符儲存到字串中。

//錯誤,應該為char str[2] = "a";

char

str[1] = "a";

//錯誤,字元陣列未顯式初始化

char

str[5];

cout << str

<< endl;

//錯誤,不允許拷貝初始化

char a = b;

用字串字面值初始化字元陣列。上述語句會編譯報錯error: initializer-string for array of chars is too long"a"是字串,編譯器會在字串後面新增一個空字串'\0',因此字串字面值的實際長度要比它的內容多1,陣列中包含\0.

字元陣列未顯式初始化時,裡面的內容是未定義的,我們不知道里面是什麼內容。

陣列不允許拷貝初始化。

//正確,str不包含\0

string str = "a";

//正確,string未顯式初始化,預設初始化為空串

string str;

cout

<< str /正確,string支援拷貝初始化

string a = b;

用字串字面值初始化string物件。字串字面值包含a\0,初始化時,除了最後的空子符外,其他的字元都被拷貝到新建立的string物件中,即string物件中不包含\0

string物件未顯式初始化時,執行預設初始化,str是一個空字串。

string物件支援拷貝初始化。

//string --> char*

const

char *str = s.c_str();//str必須為const

//char --> string

char str = "a";

string s = str;//對於string s = "a",我們可以將字串字面值"a"替換為以空字元結尾的str

//int --> vector

int arr = ;

vector

vec(begin(arr), end(arr));

//vector--> int,for迴圈

vector

vec;

int arr[3];

for(int *i = begin(arr); i != end(arr); i++)

*i = vector[i-begin(arr)];

1.迭代器end()指向尾元素的下一個元素,這樣當begin!=end時,說明容器中還有內容。

2.迭代器的判斷用!=而不用

//accumulate的第三個引數如果是0,那麼返回的是int型2;如果引數是0.0,那麼返回的是double型2.1

vector

vec;

auto res = accumulate(vec.cbegin(), vec.cend(), 0.0)