Cpp Primer 學習筆記 第3章

2021-10-24 15:21:50 字數 3953 閱讀 8129

編號說明1

using 宣告

標頭檔案中一般不應該使用using宣告

2標準庫型別string

#include

using std::string;

初始化方式:

string s1;

string s2(s1);

string s2 = s1;

string s3("value");

string s3 = "value";

string s4(n, 'c');

直接初始化

拷貝初始化 =

string物件操作:

os << s

is >> s

getline(is, s)

s.empty()

s.size()

s1 + s2

s1 = s2

s1 == s2

s1 != s2

<, <=, >, >=

string::size_type型別

auto len = s.size();

在索引中也可以使用

cctype標頭檔案函式:

isalnum(c)

isalpha(c)

iscntrl(c)

isdigit(c)

isgraph(c)

islower(c)

isprint(c)

ispunct(c)

isspace(c)

isupper(c)

isxdigit(c)

tolower(c)

toupper(c)

for (declaration : expression)

statement

for (auto c : s)

for (auto &c : s)

string可以使用下標運算子

3標準庫型別 vector

容器container

#include

using std::vector;

c++有類模板和函式模板,vector屬於類模板

編譯器根據模板建立類或者函式的過程稱為例項化instantiation

初始化:

vectorv1

vectorv2(v1)

vectorv2 = v1

vectorv3(n, val)

vectorv4(n)

vectorv5

vectorv5 =

預設有值初始化,根據型別決定

新增元素

vec.push_back()

範圍for迴圈 (不是傳統for迴圈) 不能向vector物件新增元素

4迭代器

end()指向尾元素的下一位置

運算子:

*iter

iter->mem

++iter

--iter

iter1 == iter2

iter1 != iter2

迭代器型別:

iterator

const_iterator

vectorv;

const vectorcv;

auto it1 = v.begin();

auto it2 = cv.begin();

箭頭運算子 ->

將解引用和成員訪問結合

it->mem 等價於 (*it).mem

push_back會使vector物件的迭代器失效

運算:iter + n

iter - n

iter += n

iter -= n

iter1 - iter2

>, <, <=, >=

距離型別名:

difference_type

auto mid = vec.begin() + vec.size() / 2;

二分查詢5陣列

存放型別相同的元素, vector也是

使用陣列時需要確定元素數量,vector可以不確定情況下使用

定義陣列時必須指定型別,而不能用auto

字元陣列需要留出空間存放結束符

複雜的陣列定義:

int*

ptrs[10

];// ptrs

是含有10

個整型指標的陣列

// int &refs[10] = /* ? */; // error, 不存在引用的陣列

int(*parray

)[10

] = &

arr;

// parray 

指向乙個含有

10個整數的陣列

int(&arrref

)[10

] = 

arr;

// arrref

引用乙個含有

10個整型的陣列

型別修飾符從右向左依次繫結

陣列元素訪問:

索引,陣列下標size_t型別,size_t定義於cstddef標頭檔案中(stddef.h的c++對應版本)

某些情況下,陣列的操作實際上是指標的操作

指標也是迭代器

++p可以用陣列索引乙個不存在的元素(尾指標)進行初始化

int *e = &arr[10]; // 指向arr尾元素的下一位置的指標

也可以使用begin(), end()  定義位於iterator標頭檔案

int *beg = begin(ia);

int *last = end(ia);

指標運算結果

auto n = end(arr) - begin(arr); // type: ptrdiff_t

兩個指標指向同乙個陣列時,可以利用關係運算子比較,否則,不能

6c風格字串

盡量少使用

c標準庫 string函式 cstring標頭檔案

strlen(p)

strcmp(p1, p2)   // == 0  > 正數 < 負數

strcat(p1, p2)

strcpy(p1, p2)

此類函式使用時,需保證陣列以空字元結尾

可以使用以空字元結尾的字元陣列來初始化string物件,或者為string物件賦值,反之不行

但是可以使用string的c_str成員函式對字元陣列賦值

const char *str = s.c_str(); // char * 不可以,必須是const char *

7陣列初始化vector

8多維陣列

int ia[3][4] = ,

,}; // 裡面的花括號非必須

int ib[3][4] = , , }; // 只初始化每行第乙個元素

int ic[3][4] = ; // 只初始化第一行

int (&row)[4] = ia[1]; // row繫結至ia的第二行

// 迴圈遍歷

for (auto &row : ia)

}int (*pa)[4] = ia;

cout << *pa[1] << endl; // ia[1]第乙個元素

cout << (*pa)[1] << endl; // ia[0]第2個元素

//cout << (*pa)[1][1] <<" " << (*pa)[2][1] << endl; // error

// 多維陣列遍歷新用法

for (auto pb = ia; pb != ia + 3; pb++)

cout << endl;

}// 方法類似上面

for (auto pc = begin(ia); pc != end(ia); ++pc)

cout << endl;}9

型別別名簡化指標

using int_array int[4];

typedef int int_array[4];

10define bias origin

typedef origin bias;

Cpp Primer 學習筆記 第1章

編號說明1 流iostream istream ostream std cin std cout 2控制流 while forif 3輸入數量不定 while std cin x 4std cin obj 需要根據obj資料結構實現資料輸入 比如,obj屬於結構體,則 0 1 2 3 12.3 為一...

java學習筆記 第3天

sys as sysdba sys使用者可以建立其他的使用者 create user user01 identified by u01 建立乙個使用者,口令為u01 alter user user01 identified by us01 更改使用者的口令為us01 password 只有擁有dba...

Python學習筆記 第3天

1.字典的定義 字典是一系列鍵 值對。每個鍵都與乙個值相關聯,可以通過使用鍵來訪問與之相關聯的值。字典可以理解為列表的公升級版 列表bicycles trek cannondale specialize 字典 aline 0 如果需要修改 trek 則需要先找到它的下標,而字典是根據鍵名找,下標沒有...