如果處於某種原因,要將一條語句放到兩行中,可以在第一行末尾新增反斜槓 \,否則會出錯。
左值通常是記憶體單元,右值可以使記憶體單元的內容。
因此所有的左值都可用作右值,但並非所有的右值都可用作左值。
例如365 = year;
不合理
邏輯運算符合按位運算的差別在於,按位運算子返回的並不是布林值,而是對運算元對應位執行指定運算的結果。
移位運算子(<<、>>)將整個位序列向左或向右移動,其用途之一是將資料乘以或除以2n。
三目操作符:
?:例如:
int max = (num1 > num2) ? num1 : num2;
等同於:
int max;
if (num1 > num2)
else
基於範圍的for迴圈
for (vartype varnmae : sequence)
{}
例如給定乙個陣列:
int somenums = ;
for (int a : somenums)
cout << a << endl;
就可以把陣列的每個元素輸出。
順序容器按照順序儲存資料,如陣列和列表。順序容器具有插入速度快但查詢操作相對較慢的特徵。
關聯容器按指定的順序儲存資料,就像字典一樣。這將降低插入資料的速度,但在查詢方面有很大的優勢。
容器介面卡是順序容器和關聯容器的變種,其功能有限,用於滿足特定的需求。
迭代器是一種檢查容器內元素並遍歷元素的資料型別。可以替代下標訪問vector物件的元素。每種容器型別都定義了自己的迭代器型別,如 vector:
vector::iterator iter;
上述語句定義了乙個名為 iter 的變數,它的資料型別是 vector< int > 定義的 iterator 型別。每個標準庫容器型別都定義了乙個名為 iterator 的成員,這裡的 iterator 與迭代器實際型別的含義相同。
(1)stl string 類
拼接字串
sting samplestr1 ("hello");
string samplestr2 ("string");
samplestr1 += samplestr2;
或都可以把"hello"和"string" 鏈結起來。
查詢
size_t charpos = samplestr.find ("day", 0);
if (charpos != string :: npos)
cout ....
else
cout ....
size_t在32位架構上是4位元組,在64位架構上是8位元組,在不同架構上進行編譯時需要注意這個問題。而int在不同架構下都是4位元組,與size_t不同;且int為帶符號數,size_t為無符號數。
ssize_t是有符號整型,在32位機器上等同與int,在64位機器上等同與long int.
size_t一般用來表示一種計數,比如有多少東西被拷貝等。例如:sizeof操作符的結果型別是size_t,該型別保證能容納實現所建立的最大物件的位元組大小。 它的意義大致是「適於計量記憶體中可容納的資料專案個數的無符號整數型別」。所以,它在陣列下標和記憶體管理函式之類的地方廣泛使用。
而ssize_t這個資料型別用來表示可以被執行讀寫操作的資料塊的大小.它和size_t類似,但必需是signed.意即:它表示的是signed size_t型別的。
截斷
erase()
string samplestr ("hello string! wake up to a beautiful day !);
samplestr.erase (13, 28); // 刪除從第13個到第28個字元。
samplestr.erase(ichars); //刪除指定的字元 ichars = ...
samplestr.erase (samplestr.begin (), samplestr.end());
反轉
string samplestr ("hello string! we will recerse you!);
reverse (samplestr.begin (), samplestr.end());
(2) stl 動態陣列
vector
要例項化vector,需要指定要在該動態陣列中儲存的物件型別:
std ::vectordynintarray;
std::vectordynfloatarray;
std::vectordyntunaarray;
使用push_back()在末尾插入元素。
vectorintegers;
integers.push_back(8);
列表初始化:
vectorintegers = ;
或者vectorintegers
使用insert()在指定位置插入元素
integers.insert(integers.end(),2,5); //在末尾插入兩個5
刪除vector中的元素
使用pop_back()刪除末尾的元素。
理解大小和容量
vector的大小指的是實際儲存的元素數,而vector的容量指的是在重新分配記憶體以儲存更多元素前vector能夠儲存的元素數。因此,vector的大小 <= 容量。
我的理解: vector就像乙個可以變化大小的水桶,一開始裝10l的水,大小和容量都是10,現在把水倒了 裝5l 那麼大小就是5 容量還是10 ,再倒了 裝20l的水,那麼大小和容量都是20l。
查詢大小
cout << "size: " << integers.size () << endl;
查詢容量:
cout << "capacity" << integers.capacity() << endl;
deque
與vector非常相似,但支援在陣列開頭和末尾插入或刪除元素。用push_front()和pop_front()
list是雙向鍊錶,優點主要是,插入和刪除元素的速度快,且時間是固定的。
forward_list 是單向鍊錶,只能沿著乙個方向遍歷。
例項化list
std::listlinkints;
std::listlistfloats;
std:listlisttuna;
要宣告乙個指向list中元素的迭代器,可以這樣做:
std::list::const_iterator elementinlist;
和deque類似,要在list開頭或者末尾插入元素,可使用,push_front(),push_back()
forward_list
插入元素只能用push_front(),而不能使用push_back()
容器set和multiset讓程式設計師能夠在容器中快速查詢鍵,鍵是儲存在一維容器中的值。set和multiset之間的區別在於,後者可以儲存重複的值,而前者只能儲存唯一的值。
為了實現快速搜尋,stl set和multiset的內部結構像二叉樹,這意味著將元素插入到set或multiset時將對其進行排序,以提高查詢速度。
例項化std::set物件
類似於之前的
查詢
auto elementfound = setints.find(-1);
if (elementfound != setints.end())
map和multimap之間的區別在於,後者能夠有儲存重複的鍵,前者只能儲存唯一的鍵
例項化map
#include using namespace std;
...map > mapobj;
multimap > mapobj;
第三個引數是可選的,如果指定了鍵和值的型別,而省略了第三個模板的引數,將預設公升序。
例如:std :: map mapinttostr;
std :: multimap mmapinttostr;
lambda表示式是一種定義匿名函式物件的簡潔方式,是c++11新增的。
定義lambda表示式
lambda表示式定義必須以方括號打頭[ ]。這些括號告訴編譯器,接下來是乙個lambda表示式。方括號後面是乙個引數列表,該引數列表與不使用lambda表示式時提供給operator()的引數列表相同。
(type paraname)
C 學習之路
由淺入深 錢能的c 程式設計或thinking in c 中文版就不要看了 c primer effective c more effective c exceptional c more exceptional c 看完這幾本書開始coding 最好跟乙個比較大的專案 同時自己用c 來重做資料結構...
C 學習之路
經過近半個月的時間,完成了 完善 答辯,近來無事,是時候鞏固一下c 了 就只記得三個特徵 封裝 繼承 多型,僅此而已,像模板 stl已經忘光了,設計模式更不用說了,總之,又是乙個新的起點,打算在乙個星期之內複習完c 有志同道合之人可與我一起進步,希望各位大佬給予我更多的指導!第乙個程式 hello ...
c 學習之路
c 知識點總結 primer c 習題答案 c 資源網 高併發網路庫 c 知識點 學習筆記 一 作用域符 1 全域性作用域符 name 用於型別名稱 類 類成員 成員變數 成員函式 變數等 前,表示作用域為全域性命名空間 2 類作用域符 class name 用於表示指定型別的作用域範圍是具體某個類...