c primer學習筆記

2021-06-21 14:30:24 字數 1660 閱讀 4060

3.2 標準庫型別string

1.注意在使用empty()/size()和is***x()這種函式時請注意其使用的方法,例如:

string s("hello world!");

if(s.empty())//empty()和size()更像是一種屬性

if(is***x(s[0]))//is***()這種函式更像是一種函式,而且是針對的單個字元

2.注意string::size_type這種string配套的型別,string的size()的型別就是這個,所以在使用類似s[index]時,需要使用decltype(s.size())來初始化index的型別

3.3標準庫型別vector

1.只有對確定已存在的勻速執行下標操作,例如下面這樣的就是錯的:

vectorivec;

cout<< ivec[0];

2.注意當要把一組數(字串,單詞)存入vector物件中的時候,接受輸入的變數不能是vector,而要另外開乙個變數:

vectormyint;

int tempint;

while(cin >> tempint)

你直接cin>>myint會出錯的,仔細想想這其中的原因?

3.4迭代器iterator

vectorivec;

int tempi;

while(cin >> tempi)

vector::iterator it;

for( it = ivec.begin(); it!=ivec.end();++it)

it = ivec.begin();

while(it != ivec.end())

我們定義了乙個it的迭代器,當用it的時候取到的是物件,只要當使用*it的時候才是取到了具體的值,是不是有點像指標呢?

再來看乙個對書上93的分數段的vector的改寫的例子:

可以把迭代器理解為一種下標的表示形式,更多靈活

int tempi;

vectorivec(11,0);

vector::iterator it=ivec.begin();

while(cin >> tempi)

it = ivec.begin();

while(it != ivec.end())

我們使用了it+tempi/10這種形式來表示某個具體的vector裡面的物件,而使用*(it+tempi/10)來取得具體的值,這樣是不是更容易理解迭代器一些?

下面繼續來乙個例子,是對書上練習3.20的乙個改寫:

int tempi;

vectorivec;

//vector::iterator it = ivec.begin();//注意,不能在這裡取ivec.begin(),因為他還不存在

while(cin >> tempi)

vector::iterator it = ivec.begin();

while(it != (ivec.end()-1))

現在我想應該可以更好地理解迭代器了吧,就把他想成是乙個下標的另類表示法即可。

C Primer學習筆記

學習完乙個知識點後寫上自己的理解。算是總結吧,加深一下自己的印象,也可以在以後複習的時候方便檢視 加油加油!14.1關於運算子的過載 存在的意義 目前看來就是因為操作符大部分是針對資料的,比如int型,char型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...

《C Primer》學習筆記

2008年7月18日 颱風海鷗登陸 1 宣告與定義 變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。變數的宣告用於向程式表明變數的型別和名字。變數的宣告包括物件名 物件型別和物件型別前的關鍵字extern 當設計標頭檔案時,記住定義和宣告的區別是很重要的...

c primer學習筆記

第一章 1.hello world include stdafx.h include include int main std cout std cout sum return 0 include include int main 輸出10到0的自然數 while t 0 std cin t ret...