二、字串、向量和陣列
2.vector
auto是讓編譯器自己去分析表示式所屬的型別
它會忽略頂層const,如果希望是頂層的,則需宣告出來
選擇並返回運算元的資料型別int i=1;
const
int ci=i,
&cr=ci;
auto b=ci;
//b是乙個整數,ci的頂層const被忽略掉了
auto c=cr;
//c是乙個整數,同上
auto d=
&i;//d是乙個整型指標
auto e=
&ci //e是乙個指向整數常量的指標,底層const
const
auto f=ci;
//ci的推演型別是int,f是const int
decltype((variable))的結果永遠是 引用
decltype(variable)的結果只有當variable本身就是乙個引用時才是引用
using:標頭檔案不應包含usingdecltype(f
()) sum=x;
//sum的型別就是函式f的返回型別
decltype
((i)
) d;
//錯誤:d是int&,必須初始化
decltype
(i) d;
//正確:e是乙個(為初始化的)int
操作string s1;
//預設初始化,s1是乙個空字串
string s2
(s1)
;//s2是s1的副本
string s2=s1;
//同上
string s3
("value");
//s3是字面值"value"的副本,除了字面值最後的那個空字元外
string s
(n,'c');
//把s初始化為由連續n個字元c組成的字元
作用os《將s寫到輸出流os中,返回os
is《從is中讀取字串賦給s,字串以空白分隔,返回is
getline(is,s)
從is中讀取一行賦給s,返回is
s.empty()
判斷為空返回true,不為空返回false
s.size()
返回s中字元的個數
s[n]
s中第n個字元,n從0開始
s1+s2
s1和s2連線
s1=s2
賦值s1==s2
判斷s1!=s2
對大小寫敏感
<,<=,>,>=
利用字元在字典中的順序進行比較,對大小寫敏感
①使用getline讀取一整行
如果直接用 cin 輸入的話,他會從第乙個非空白符開始讀取,直到遇見下一處空白為止。
若想要那被忽略掉的空白符,那麼就會用到getline語句。
**如下(示例):
②處理string物件中的字元string line;
//每次讀取一行,直到檔案末尾?
while
(getline
(cin,line)
) cout << line << endl;
//line中不包含換行符,需要手動新增
此處用到了標頭檔案 cctype 操作
作用isalnum( c )
當c是字母或數字時為真
isalpha( c )
當c是字母時為真
iscntrl( c )
當c是控制字元時為真
isdigit( c )
當c是數字字元時為真
isgraph( c )
當c不是空格但可列印時為真
islower( c )
當c是小寫字母時為真
isprint( c )
當c是可列印字元時為真
ispunct( c )
當c是標點符號時為真
isspace( c )
當c是空白時為真(空格、製表符、回車、換行、進紙符)
isupper( c )
當c是大寫字母時為真
isxdigit( c )
當c是十六進製制時為真
tolower( c )
如果c是大寫字母,則輸出小寫字母,否則原樣輸出
toupper( c )
與上相反
要想處理string中的一部分字元
一種是可以像c那樣使用下標;
還有一種是使用迭代器(??)
學完vector之後,第一印象是感覺這個有點像資料結構裡邊講的棧,但它比棧靈活多了//處理每個字元,用基於範圍的for語句
string str
("some string");
//每行輸出str中的乙個字元
for(
auto c:str)
cout << c << endl;
1、引用不可以成為vector的元素,因為他不是物件
2、可以用花括號初始化每乙個值
3、可以用括號指定元素個數或相同的元素值
4、只能使用直接初始化,不可以使用拷貝初始化(只有在型別相同的時候才可以拷 貝)
5、適用於三種情況:①初始值已知且數量較少
②初始值是另乙個vector物件的副本
③所有元素的初始值都一樣
舉個書上的例子
這些操作基本上和string的一些操作差不多 操作vector<
int> v;
//空vector物件
for(
int i=
0;i!=
100;
++i)
v.push_back
(i);
//依次把整數值放到v的尾端,相當於棧的**
//迴圈結束後v有100個元素,從0到99
作用v.empty()
如果v不含有任何元素,返回真;反之,則假
v.size()
v中元素的個數
v[n]
返回v中第n個位置上元素的引用
v1=v2
用v2中元素的拷貝替換v1中的元素
v1=用列表中元素的拷貝替換v1中的元素
v1==v2
v1和v2相等當且僅當它們的元素數量相同且對應位置的元素值都相同
<,<=,>,>=
以字典順序進行比較
舉個栗子vector的下標型別和string的一樣,都是 size_type 型別。
不能用下表形式新增元素
比如向vector物件中新增10個元素
在這裡邊,第乙個for迴圈是錯誤的,v是乙個空vector,不包含任何元素,所以也就不存在可以通過下標去訪問元素。vector<
int> v;
//空vector物件
for(decltype ( v.
size()
) i=
0;i!=
10;i++
) v[i]
=i;for
(decltype ( v.
size()
) i=
0;i!=
10;i++
) v.
push_back
(i);
要想新增元素,就目前而言,只能用push_back(t),向尾端新增元素。
學習貴在堅持
重新學資料結構和演算法有兩三周時間了,從之前頭大到看懂一點,到看的差不多,有幾次處於崩潰邊緣,雖然有些還是模模糊糊的,但是已經深刻感受到資料結構和演算法的魅力,也知道了解決問題的方式,之前學東西不會了,不知道找卡住的點,現在知道了,一旦乙個東西不懂了,就會去找卡住自己的點在哪,是有些概念不明白,還是...
堅持c 學習,真正掌握c (1)
今天全面複習了c primer中的第七章函式部分,複習了函式的宣告,定義,過載以及內聯函式的使用。最後複習了指向函式的指標。下面是我的複習心得 1.c 為了相容c語言,以下的兩種函式宣告是同樣的,因為const int形參既接受const實參也接受非const實參,所以沒有區別 int f int ...
C 之路 堅持
乙個典型的 c 程式設計師成長經歷 1.完整的學一遍 c 所有語言特性,典型書籍 the c programming language part1,part2,c primer 感覺 c 像大雜燴 多程式設計范型 各種精妙的語法特性 friend,virtual rtti,const mutable...