程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 重拾C++ 基礎知識總結(二),基礎知識

重拾C++ 基礎知識總結(二),基礎知識

編輯:C++入門知識

重拾C++ 基礎知識總結(二),基礎知識


1、標准庫string類型:

用戶程序要使用string類型對象,必須包含相關頭文件 #include <string>

字符串字面值與標准庫string類型不是同一種類型,字符串字面值是字符數組,而string是對象

 

2、

int main(){

        string s;

        cin>>s;

        cout<<"s="<<s<<endl;

}

 

string類型的輸入操作符:

讀取並忽略開頭所有的空白字符;讀取字符直至再次遇到空白字符,讀取終止(即只讀取一個單詞)

 

// 讀取多個字符串,直至遇到文件尾

int main(){

        string s,result;

        while(cin>>s)

         result += s;

        cout<<"result="<<result<<endl;

}

 

3、getline()函數讀取整行文本(接受兩個參數,一個輸入流對象和一個string對象,getline函數並不會忽略開頭的換行符但會忽略尾部的換行符)

 

int main(){

        string line;

        while(getline(cin,line))

                cout<<"line="<<line<<endl;

}

 

string對象重載了運算符 + = == != >= <= < > [] 

其中 s[] 返回s中位置為n的字符,位置從0開始計數

另外還有函數 s.empty() 判斷字符串是否為空串, 函數 s.size() 返回字符的個數

s.size()函數的返回值:string::size_type類型,任何存儲string的size操作結果變量必須為string::size_type類型,不要把size的返回值賦給一個int變量(使用配套類庫類型string::size_type可以做到與機器無關,string::size_type是unsigned的)

 

4、string對象重載了運算符 + = == != >= <= < > [] 

其中關系操作符 > < >= <= 是區分大小寫的,大寫字母排在小寫字母前面

如果兩個string對象的字符不同,則比較第一個不匹配的字符

 

賦值操作符 =  st1=st2

必須先把st1占用的相關內存釋放掉,然後再分配st1足夠存放st2副本的內存空間,最後把st2中的所有字符復制到新分配的內存空間中

 

兩個string相加

下面把兩個string對象連接起來產生第三個string對象

string s3 = s1 + s2;

 

string對象與字符串字面值的連接(+操作符的左右操作數必須至少有一個是string類型的):

string s1 = "hello";

string s2 = "world";

string s3 = s1 + ",";

string s4 = "hello" + ","; // 錯誤,因為沒有string對象

string s5 = "s1 + "," + "world";

string s6 = "hello" + "," + s2; // 錯誤,因為前兩個都是字符串字面值

 

從string獲取字符

string類型通過下標獲取字符([]運算符重載)

 

5、字符處理(cctype頭文件):

isalnum(c) 判斷字符是否是字母或數字

isalpha(c) 判斷c是否是字符

iscntrl(c) 判斷c是否為控制字符

isdigit(c) 判斷c是否為數字

isgraph(c) 判斷是否為空格,但可以打印

islower(c) 判斷是否是小寫

isprint(c) 判斷是否可打印

ispunct(c) 判斷是否是標點

isspace(c) 判斷是否是空白字符

issupper(c) 判斷是否是大寫

isxdigit(c) 判斷是否是十六進制數

tolower(c) 如果是大寫轉為小寫

toupper(c) 如果是小寫轉為大寫

 

6、c標准庫頭文件的c++版本

c++標准庫除了定義了一些特定於c++的設施外,還包括c標准庫。c++中的頭文件cctype其實就是利用了c標准庫函數,這些庫函數就定義在c標准庫的ctype.h頭文件中。

c標准庫頭文件命名形式為name.h,而c++版本則命名為cname,少了後綴.h而在頭文件名前加了c。c表示這個頭文件源自c標准庫。因此,cctype與ctype.h文件的內容是一樣的,只是采用了更適合c++程序的形式。特別的,cname頭文件中定義的名字都定義在命名空間std內,而.h版本中的名字卻不是這樣。

通常,c++程序中應采用cname這種頭文件的版本,而不采用name.h版本,這樣,標准庫中的名字在命名空間std中保持一致。使用name.h版本會給程序員帶來負擔,因為他們必須記住哪些標准庫名字是從cc繼承來的,哪些是c++所持有的。

 

7、標准庫vertor類型

vertor是同一類型的對象的集合,每個對象都有一個對應的整數索引值。它可以包含其他對象,一個容器中的所有對象都必須是同一類型的。(頭文件 #include <vertor>)

vertor是一個類模版(不是一種數據類型),使用模版可以編寫一個類定義或函數定義,而用於多個不同的數據類型

 

vertor<int> ivec;

vertor<Sales_item> Sales_vec;

 

8、vector對象的定義與初始化:

 

vertor構造函數

vertor<T> v1;

vertor<T> v2(v1);

vertor<T> v3(n,i); // v3包含n個值為i的元素

vertor<T> v4(n); // v4含有值初始化(默認初始化)的元素的n個副本

 

vertor<int> ivec(10,3) // 初始化包含10個3的vertor

 

vertor對象的動態增長:vertor可以在運行時高效地添加元素,有效的方法就是先初始化一個空的vertor對象,然後動態的增加元素

 

9、值初始化:內置類型數據有默認初始化值,對於自定義的類型,要使其可以自動初始化,就要提供一個默認的構造函數(無參構造函數)

 

10、vertor對象的操作:

 

v.empty() // 判斷vertor是否為空

v.size() // 返回vertor的元素個數(返回類型應總是包括vertor的元素類型為vertor<T>::size_type,vertor::size_type是不正確的)

v.push_bach(t) // 在vertor的末尾增加一個值t的元素(動態添加元素)

v[n] // 返回vertor中位置為n的元素(元素由0開始計算)

v1 = v2; // 將v1中的元素替換為v2中的元素的副本

v1 == v2; // 比較兩個vertor是否相等

!=, <, <=, >, >=

 

11、

for(vertor<int>::size_type ix = 0; ix != ivec.size(); ++i){

ivec[ix] = 0;

}

c++中習慣優先選用!=而不是<來編寫循環判斷條件

另外,for循環中沒有保存ivec.size()的值,而是使用了函數表示結束的標識;在每次循環中測試size的當前值,而不是在進入循環前,存儲size值的副本(vertor是可以動態的添加元素的,所以使用函數判斷結束標識更安全)

 

12、c++中的vertor的下標操作不可以添加元素,下標只能用於獲取已存在的元素(或者修改已存在的元素的值),應該使用push_back()函數向vertor中添加元素;

試圖獲取不存在的下標元素時會產生一個運行時錯誤,不能確保執行過程中可以捕捉到這類錯誤,運行程序的結果往往是不確定的

 

13、迭代器:

除了使用下標訪問vertor的元素之外,還可以使用迭代器 

頭文件  #include <iterator>

每種容器類型都定義了自己的迭代器類型

vertor<int>::iterator iter;

 

每種容器都定義了一對命名為begin和end的函數,用於返回迭代器,如果有元素則begin返回的迭代器指向第一個元素

vertor<int>::iterator iter = ivec.begin();

由end操作返回的迭代器並不返回指向vertor中任何實際的元素,相反,它只起到一個哨兵的作用,表示已經處理完vertor中所有的元素

 

迭代器類型可通過解引用操作符(*操作符)來訪問迭代器所指向的元素:

*iter = 0; // *iter 與 iter[0]指相同的元素

++iter; // 迭代器的自增操作,指向下一個元素

解引用操作符返回迭代器當前所指向的元素(不能對end迭代器進行解引用或自增操作)

 

迭代器的== 和 != 操作可以比較兩個迭代器是否指向同一個元素

 

迭代器在vertor的應用

for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++){

*iter = 0;

}

 

14、const_iterator(只讀迭代器,只用於讀取容器中的元素,不能改變其值)

const_iterator 與 const迭代器的區別,const的迭代器一旦被初始化就不能改變其指向的迭代器,而可以改變其迭代器對應的值

 

15、迭代器的算術運算:

iter+n iter-n 可以直接定位到元素

iter1-iter2 得到的數據為different_type的signed類型的值

獲取中間元素的迭代器:vector<int>::iterator mid = vi.begin() + vi.size()/2;

任何改變vector長度的行為都會導致已存在的迭代器失效

 

16、bitset類型(頭文件 #include <bitset>):

bitset類型對象的區別在於其長度而不是其類型,在定義bitset時,要明確bitset含有多少位,須在尖括號內給出它的長度值

bitset<32> bitvec; // 32位的0

 

string對象和bitset對象之間是反向轉化的,string對象的最右邊字符(下標最大的字符)用來初始化bitset對象的低階位(下標為0的位)

 


二級C公共基礎知識總結

加油啊!
 

C++基礎知識的總結總結

其實所有語言都是想通的。。。C++吧。。首先你要知道
0.三種程序結構。。循環分支順序
1。數據類型,定義及使用
2.數組的定義及使用。。作為函數參數。。。函數返回值啥的。。
3函數的定義級使用。。參數,,返回值。重載。。啥的。。
4.指針含義,使用,定義。作為函數參數,,函數返回值啥的。。。
5結構的定義即使用 指針
6.頭文件的作用。。使用方法
7接著就該類了、屬性,,函數。。重載。。遞歸的使用
8類的繼承。。派生。。多態。。裡面有啥虛函數。。虛基類。。
這些算基礎吧。高深的,我沒怎麼接觸。。希望能幫到你
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved