《C++ Primer》讀書筆記(6.5,6.8,6.11)

迭代器

   迭代器[iterator]提供了一種一般化的方法,對順序或關聯容器類型中的每個元素進行連續訪問。例如,假設iter 爲任意容器類型的一個iterator ,則 

         ++iter; 
    向前移動迭代器 使其指向容器的下一個元素 而 
         *iter;

    返回iterator 指向元素的值 


iteratorvector 類中定義的typedef      以下語法 

         vector<string>::iterator 

可以用標量算術運算使iterator 從當前位置偏移到某個位置上 例如 
        vector<int>::iterator iter = vec.begin()+vec.size()/2;

iterator 算術論算只適用於vectordeque  ,而不適用於list。因爲list 的元素在內存中不是連續存儲的。


       #include <string> 
         string words[4] = { 
                "stately", "plump", "buck", "mulligan" 
          }; 

    我們可以通過傳遞數組words 的首元素指針和末元素後一位置的指針來初始化string 

      vector< string > vwords( words, words+4 ); 


關於string的子字符串匹配

string::npos 
    表明沒有匹配
              string name( "AnnaBelle" ); 
              int pos = name.find( "Anna" ); 

              if ( pos == string::npos ) 
                  cout << "Anna not found!\n"; 

簡要地概括一下string 類支持的其他查找函數 。
除了find()find_first_of()外,string 類還支持其他幾個查找操作 rfind() ,查找最後 即最右 的指定子串的出現

     	 string river( "Mississippi" ); 
         string::size_type first_pos = river.find( "is" ); 
         string::size_type last_pos = river.rfind( "is" ); 
    find()返回索引值1表明第一個 is的開始      而rfind()返回索引值4


find_first_not_of()查找第一個不與要搜索字符串的任意字符相匹配的字符 例如 爲找到第一個非數字字符 可以寫 

        string elems( "0123456789" ); 
        string dept_code( "03714p3" ); 

        // returns index to the character 'p' 
        string::size_type pos = dept_code.find_first_not_of(elems); 
find_last_of()查找字符串中的 與搜索字符串任意元素相匹配  的最後一個字符

find_last_not_of()查找字符串中的 與搜索字符串任意字符全不匹配 的最後一個字符


at()操作

提供了運行時刻對索引值的範圍檢查。

如果索引是有效的,at()返回相關的字符元素,與下標操作符的方式相同;但是 如果索引無效,則at()拋出out_of_range 異常 

         void 
         mumble( const string &st, int index ) 
         { 
               try { 
                   char ch = st.at(index); 
		   catch( std::out_of_range ) { ... } 


               // ... 
         } 


發佈了35 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章