C++Simplify04-標準庫string和vector

來源:互聯網
上載者:User

1.      標準庫string

1-1:聲明:#include<string>  usingstd::string; //或者using namespace std;

1-2:string對象常用的建構函式

           string s1;  //預設建構函式,s1為空白串

           string s2(s1); //將s2初始化為s1的一個副本

           string s3(“value”); //將s3初始化為一個字串字面值副本

           string s4(n,’c’);   //將s4初始化為字元’c’的n個副本

1-3:string對象的讀寫 cin>>str;  cout<<str;

讀取並忽略開頭所有的空白字元(如空格、分行符號、定位字元)

           讀取字元直至再次遇到空白字元,讀取終止

           對未知數目string的讀入

                           string str;

         while(cin>>str)

            cout << str << endl;

      當輸入無效字元時停止迴圈(輸入Ctrl+Z)

1-4:getline讀取整行文本,不包括分行符號,且不忽略航開頭的分行符號。

           getline的參數:istream輸入資料流對象和 string對象

                      

1-5:string常用操作

str.empty();   如果str為空白串,返回true否則返回false  bool型

str.size();     返回s中字元的個數  size_type型

str[n];       返回str中位置為n的字元,位置從0開始計數  char型

str1+str2;    字串串連,返回新的字串  string型。(+左右必須至少有一個是string,不能都是字面值)

str1 += str2;  將str2追加到str1後面

str1 = str2;   字串賦值

str1 == str2;判等操作 相等返回true否則返回false  bool型

!= 、<、 <=、 >、>=  保持常有含義

1-6:補充string::size_type

         事實上size()返回的是string::size_type類型的值。size_type即為unsigned型。

size_type儲存的string長度是int型所能儲存的兩倍。所以為了儲存大文本string,避免溢出,儲存string對象size最安全的方法就是使用string::size_type類型,例如:

         string str; 

         cin >> str;

         string::size_type  st = str.size();

1-7:字串比較大小:(與字典排序相同策略,字典中排在前面的小於排在後面的)

如果連個string長度不同,且短的string對象與長的string對象的前面部分相匹配,則短的string對象小雨長的string對象;

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

         string str1 = “Hello”;  string str2 = “Hello World”;  string str3 = “Hiya”;

         則 str1 <str2;  str3 > str1;  str3 > str2;

1-8:賦值本質:string str= “Hello”;  sting str2 = “World”;  str1 = str2;

先把str1佔用的相關記憶體釋放掉,再分配足夠str1存放str2副本的記憶體空間,最後把str2中的所有字元複製到新分配的記憶體空間。

         1-9:單個char字元處理

         

                  

2.      標準庫vector

2-1:vector是同一種類型的對象的集合,每個對象都有一個對應的整數索引值。和string對象一樣,標準庫將負責管理與儲存元素相關的記憶體。我們把vector成為容器,可以包含其他對象(同一類型)。必須有的聲明:

#include<vector>

using std::vector;

2-2:vector是一個類模板。

2-3:vector對象的定義和初始化:

vector<T>v1;  vector檔案類型為T的對象。預設建構函式v1為空白

vector<T> v2(v1);  v2是v1的一個副本

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

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

         2-4:vector支援動態增長。push_back();函數

         2-5:vector常用操作:

                   v.empty(); 如果v為空白,返回true否則返回false

                   v.sizse();  返回vector中個數 size_type類型

                   v.push_back(t); 增加一個值為t的元素

                   v[n]; 
返回v中位置為n的元素

                   v1= v2; 
賦值

                   v1== v2; 判等

                   !=、<、>、<=、>=  比較  

3.      迭代器iterator。迭代器是一種檢查容器(必須是容器類,例如vector)內元素並遍曆元素的資料類型。

3-1:每種容器類型都定義了自己的迭代器類型,如vector:

           vector<int>::iterator  iter;   //int型的vector迭代器定義語句

3-2:begin和end操作。

iverc.begin(); 返回迭代器指向的第一個元素vector<int>::iterator iter =iverc.begin();

iverc.end(); 超出末端迭代器。end操作返回的迭代器指向vector的“末端的下一個”起到哨兵的作用。

         3-3:自增和解引用運算(*)

                   *iter返回迭代器當前所指向的元素。(*稱為解引用操作符)

                   iter++;則迭代器向前移動一個位置,指向容器中的下一個元素

         3-4:const_iterator該類型只能用於讀取容器內元素,不能改變其值。

                   注意:中間有底線,不是constiterator

const聲明的iterator對象必鬚生聲明時初始化,一旦初始化後,就不能改變,自增等操作都不可以實現。

const_iterator對象可以用constvector或非const vector,因為不能改寫元素值。const迭代器這種類型幾乎沒什麼用處:一旦它唄初始化,只能用它來改寫其指向元的元素,但不能使它指向任何其他元素。

 

每日三題(2012-07-31)

(1)讀一組整數到vector對象,計算並輸出每對相鄰元素的和。如果讀入元素個數為奇數,則提示使用者最後一個元素沒有求和,並輸出其值。然後修改程式:頭尾元素兩兩配對(第一個和最後一個,第二個和倒數第二個,以此類推),計算每對元素的和,並輸出。

(2)讀入一段文本到vector對象,每個單詞儲存為vector中的一個元素。把vector對象中每個單詞轉換為大寫字母。輸出vector對象中轉化後的元素,每八個單詞為一行輸出。

(3)編寫程式來建立有10個元素的vector對象。用迭代器把每個元素值改為當前值的2倍。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.