Primer 三四五章

  • 序言

    • 看了看錶,再看了看書,2個小時就沒啦(又到了吃中飯的時間,O(∩_∩)O哈哈~)。一個上午感受啥也沒幹呢,不過仍是從書上看到了一些東西,對於這些基礎的知識,仍是有些東西沒有記得很深,因此仍是花了許久的時間回味總結。三章內容主要是挑出了本身不是很熟悉和很懂的地方或者是面試中會用到的一些難點來記錄。

  • string類

    • 這一章大致上是一些基礎,沒啥好講的。就記錄一些簡單的易忘的東西吧
      •   string對象的初始化:基本的初始化操做(有點和容器之列的對象相似),可是string對象輸入輸出操做是不會包含對應的空格的(用cin操做輸入string,碰到空格被視爲兩個單獨的字符串)
      • string對象的size函數返回的是一個無類型的size_type函數,這個函數頗有意思,下面重點介紹一下這個fat girl吧。對了它還有一個孿生兄弟:size_t
        •    size_type:爲了使本身的程序有很好的移植性,c++程序員應該儘可能使用size_t和size_type而不是int, unsigned
                由string類類型和vector類類型定義的類型,用以保存任意string對象或vector對象的長度,標準庫類型將size_type定義爲unsigned類型.string::size_type它在不一樣的機器上,長度是能夠不一樣的,並不是固定的長度。但只要你使用了這個類型,就使得你的程序適合這個機器。與實際機器匹配。
                size_t 使用的時候頭文件須要 <cstddef> ;size_type 使用的時候須要<string>或者<vector>
            string::size_type 制類型通常就是unsigned int, 可是不一樣機器環境長度可能不一樣 win32 和win64上長度差異;size_type通常也是unsigned int
                實際上二者之間仍是不一樣的:size_t不是容器概念;size_type是容器概念,沒有容器不能使用。
           #include<iostream>  
          #include<vector>  
          using namespace std;  
          int main()  
          {  
           cout<<" typeid(size_t).name() = "<<typeid(size_t).name()<<endl;  
           cout<<" typeid(vector<int>::size_type).name() = "<<typeid(vector<int>::size_type).name()<<endl;  
            
           return 0;  
          } 
        •   上面講了一堆,來總結一下
          •   到底什麼是size_type類型呢?
            •   string類類型和許多其餘庫類型都定義了一些配套類型(companion type)。經過這些配套類型,庫類型的使用就能與機器無關。size_type就是這些配套類型中的一種。size_type被定義爲與unsigned型(unsigned int, unsigned long)具備相同的含義,並且能夠保證足夠大可以存儲任意string對象的長度。爲而來使用由string類型定義的size_type類型。程序員必須加上做用於操做符來講明所使用的size_type類型是由string類定義的。
            •   咱們爲何不適用int變量來保存string的size呢?

              使用int變量的問題是:有些機器上的int變量的表示範圍過小,甚至沒法存儲實際並不長的string對象。如在有16位int型的機器上,int類型變量最大隻能表示32767個字符的string對象。而能容納一個文件內容的string對象輕易就能超過這個數字,所以,爲了不溢出,保存一個string對象的size的最安全的方法就是使用標準庫類型string::size_type().html

              一點注意:雖然是在學習標準庫string的時候巧遇了size_type類型,可是,其實vector庫也能夠定義size_type類型,在vector庫中還有一個difference_type類型,該類型用來存儲任何兩個迭代器對象間的距離,因此是signed類型的。ios

            • 什麼是size_t類型呢?其實本質上和size_type沒有多大區別

              其實size_t和size_type相似,size_t 類型定義在cstddef頭文件中,該文件是C標準庫的頭文件stddef.h的C++版本.它是一個與機器相關的unsigned類型,其大小足以保證存儲內存中對象的大小。用法以下:c++

              bitset<32> bitvec;程序員

              size_t sz=bitvec.size();面試

               另外sizeof操做符的返回值的類型也爲size_t哦數組

    • 標準庫vector安全

      •   對我來講其實這一部分的知識吧,都應該很是熟悉了(主要是仍是由於下功夫看了兩遍STL源碼,加上平時都是比較喜歡用STL的),因此這裏就記錄一些比較細節的東西。函數

        •   vector初始化賦值操做(C++11新增):容器類的主要賦值仍是那麼幾類,網上都是有的(一個套路),此次在樹上無心看到C++11新增了一種相似數組的賦值方式。
                      vector<int> res = {"1", "2", ...}
                      和數組相似的賦值方式也是可行的學習

        •   還有就是迭代器的一些指向問題和迭代器的基本加減運算問題也是比較值得注意的(容易出錯)。例子的話就不寫了,練多了就簡單了。

    • 多維數組
      •   其實這部份內容在C語言學習的時候我就沒有很好的弄懂,今天看了這本書感受又懂了一點,可是主要仍是對C++11那個for範圍遍歷二維數組的處理有了一點更深的認識。
        •   好比這個例子:
          size_t cnt = 0;
          for (auto &row : is)
              for (auto &col : row){
                  col = cnt;
                  ++cnt;
          }

           這個例子是用auto進行遍歷的二維數組,is是一個二維的,row表示的是is中每一行的一維數組,col表示的是每一個一維數組的元素。這裏最主要的是每一個auto變量都是引用的形式,這個主要的目的是放置數組直接變成指針了(隱式轉換)  eg: int a[10] = {0}; int *pt = a;   這樣會發生數組變成指針的隱式轉換。spa

      •   其餘的內容感受影響都不是很大,基礎了。


  • 表達式

    •   從這半年多來面試的經驗和一些筆試經驗看:這方面的面試題比較多(主要仍是比較好出題在這裏)這裏就很少總結了,奉上本身整理的筆記(略渣的筆記,O(∩_∩)O哈哈~)
      面試常見題
  • 語句

    •   這裏就主要看了一下異常機制,沒有實戰過,處理異常的技術仍是不行。本身水平有限,這部分仍是得看大佬的總結,也寫不出什麼比書上更好的東西了,就直接借鑑一下別人的博客吧(懶到一種境界)
  • 總結

    •   上午大致上也就搗鼓了這麼點東西,效率仍是過低了,得提高提高效率,加油了。
相關文章
相關標籤/搜索