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...