C++之標準庫的學習總結

2021-03-02 嵌入式ARM

一、標準庫「引子」:

1、操作符"<<"的原生意義是按位左移,例如:

1<<2

它的意義是將整數1按位左移2位,即:

0000 0001   演變成      0000 0100

重載左移操作符,將變量或者常量左移到一個對象中

代碼示例:

#include <stdio.h>

const char endl = '\n';

class Console
{
public:
    Console& operator <<(int i)
    {
        printf("%d\n",i);
        return *this;
    }
    Console& operator << (char c)
    {
       printf("%c\n",c);
       return *this;
    }
    Console& operator <<(const char* s)
    {
         printf("%s\n",s);
         return *this;
    }
    Console& operator << (double d)
    {
       printf("%f\n",d);
       return *this;
    }
};

Console cout;

int main()
{
     cout<<1 << endl;
     cout<<"TXP"<<endl;

     double a = 0.1;
     double b = 0.2;

     cout << a + b <<endl;

     return 0;
}


運行結果:

root@txp-virtual-machine:/home/txp# ./a.out
1


TXP


0.300000


從上面我們可以看到,不直接使用printf函數去列印這個值,這個以前在書上,都是直接講解把數值說送到輸出流中去,但是你一開始學習cout函數(或者說你還沒有接觸到對象的時候,根本不明白這什麼意思);如果進行了左移的重載之後,那麼程序將產生神奇的變化,所以在 main() 中不用 printf() 和格式化字符串 '\n' 了,因為編譯器會通過重載的機制會為我們選擇究竟使用哪一個重載機制。

二、c++標準庫:

1、標準庫的特性:

2、C++編譯環境的組成:

3、C++標準庫預定義了很多常用的數據結構:

-<bitset>        -<set>          -<cstdio>
-<deque>         -<stack>        -<cstring>    
-<list>          -<vector>       -<cstdlib>
-<queue>         -<map>          -<cmath>    

代碼示例:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>

using namespace std;//所謂命名空間,是一種將程序庫名稱封裝起來的方法,它就像在各個程序庫中立起一道道圍牆


int main()
{
    printf("Hello world!\n");

    char* p = (char*)malloc(16);

    strcpy(p, "TXP");

    double a = 3;
    double b = 4;
    double c = sqrt(a * a + b * b);

    printf("c = %f\n", c);

    free(p);

    return 0;
}


輸出結果:

root@txp-virtual-machine:/home/txp# ./a.out
Hello world!
c = 5.000000

註:關於命名空間的介紹,這裡沒有詳細的去介紹,後面會重新做一個詳細介紹。

4、cout和cin兩個函數形象比喻:

代碼示例:

#include <iostream>
#include <cmath>

using namespace std;


int main()
{
    cout << "Hello world!" << endl;
    
    double a = 0;
    double b = 0;
    
    cout << "Input a: ";
    cin >> a;
    
    cout << "Input b: ";
    cin >> b;
    
    double c = sqrt(a * a + b * b);
    
    cout << "c = " << c << endl;
    
    return 0;
}

結果輸出:

root@txp-virtual-machine:/home/txp# ./a.out
Hello world!
Input a: 3
Input b: 5
c = 5.83095

當然這裡關於cout和cin兩個函數裡面的細節也沒有寫明;不過如果接觸過C++的朋友,現在看起來,現在這種寫法,更加c++正統一點,之前的寫法都是c寫法,除了類的寫法之外。

三、總結:

C++標準庫是由類庫和函數庫組成的集合

C++標準庫包含經典算法和數據結構的實現

C++標準庫涵蓋了C庫的功能

C++標準庫位於std命名空間中


相關焦點

  • Apache基金會廢棄其C++標準庫
    Apache軟體基金會決定終止Apache C++標準庫項目——stdcxx項目。該庫並沒有像GCC的libstdc++庫甚至是LLVM的libc++庫那樣被廣泛使用,自從2005年開始,Apache就開始支持stdcxx標準庫的開發。在2008年中旬,Apache發布了最後一個版本stdcxx 4.2.1。
  • 跟我學C++中級篇——STL的學習
    一、c++標準庫C++的標準庫主要包含兩大類,首先是包含C的標準庫的,當然,為了適應c++對一些C庫進行了少許的修改和增加。最重要的當然是面向對象的c++庫;而c++庫又可以分成兩大類,即面向對象的c++庫和標準模板庫,也就是題目中的STL。
  • C++基礎總結(一):從「hello world」入門C++!
    最近對C++的基礎知識進行了大匯總,當然這是精簡版的,但是篇幅也不少,所以今天先分享一下hello world,建議大家收藏慢慢學習,同時希望對大家的C++學習有所幫助。C++ 是一種靜態類型的、編譯式的、通用的、大小寫敏感的、不規則的程式語言,支持過程化編程、面向對象編程和泛型編程。C++ 被認為是一種中級語言,它綜合了高級語言和低級語言的特點。
  • Python 標準庫之 JSON
    下面我們就開始今天的學習。JSON首先我們參考《維基百科》中的相關內容,來對 JSON 做如下介紹:JSON ( JavaScript Object Notation ) 是一種由道格拉斯構想設計、輕量級的數據交換語言,以文字為基礎,且易於讓人閱讀。
  • 學習c++筆記——標準輸出流cout
    前和往常一樣,一邊喝早茶,一邊上網和女粉絲侃大山,在手機和平板電腦上整理修改《html5》、《javascript》、《css3》、《c語言》等多年前寫的教程(c++
  • c++之重載函數學習總結
    int a, int b){   return(a+b);}int func(const char* s){    return strlen(s);}int main(){   return 0;}上面在c++
  • c++ 之布爾類型和引用的學習總結!
    2、c++中的三目運算符可以直接返回變量本身,既可以作為右值使用,也可以作為左值來使用。3、c++中的三目運算符可能返回的值中如果有一個是常量值,則不能作為左值進行使用,這點要切記和理解。/a.outa=5,b=6a=6,b=53、特殊的引用:--在c++中可以聲明const引用。
  • C++之字符串類學習總結
    一、回顧c語言對字符串的實現:一般我們在c語言要實現對字符串操作的話,一般是採用字符數組或者一組函數來實現的,為啥這樣做呢,那是因為c語言裡面根本就沒有字符串類型的關鍵字;而且c語言也支持自定義類型,所以更加無法獲得字符串類型為了解決這個問題,在c++
  • c++的輸入與輸出
    c++輸入與輸出C++ 標準庫提供了一組豐富的輸入/輸出功能,本章將討論 C++ 編程中最基本和最常見的 I/O 操作。輸入輸出並不是c++語言的正式組成成分,c和c++沒有為輸入輸出提供專門的結構。在c語言中輸入輸出是通過調用scanf和printf 實現的,在c++中是通過調用流對象cin和cout實現的。
  • c++之內存分配、命名空間、強制類型轉換學習總結
    一、C++動態內存分配:在學習c語言的時候,我們一般都是使用庫函數malloc()來進行內存的申請分配,然後使用庫函數free()來進行釋放申請到的內存;現在在c++裡面採用了另外一種內存申請的方法:c++中通過
  • Effective C++條款13 C++基本功之智能指針
    智能指針簡介C++語言標準庫STL提供了一套智能指針接口,且一直處於完善狀態,如下圖所示:最早的智能指針是std::auto_ptr,到c++11才開始廣泛使用,平時用得最多的是這三個:對於前一個問題,C++標準庫聲明shared_ptr是線程安全的,不用擔心引用次數出問題,也不用擔心析構函數會調用多次。後一個問題其實是對shared_ptr對象的寫入,這個不是線程安全的,可以通過atomic_store和atomic_load來處理安全讀寫。
  • Python 標準庫之 OS
    本文字數:4255 字閱讀本文大概需要:11 分鐘寫在之前在昨天的文章(Python 標準庫之 sys & copy)中,我們介紹了 Python 標準庫中的 sys 和 copy,不知道你掌握了多少。
  • 標準庫的自我介紹
    寫在之前在 Python 被安裝的時候,有不少模塊隨著安裝到本地計算機上,這些東西讓 Python 擁有了無限生機,能夠輕而易舉的使用很多模塊,這些在安裝 Python 時就默認已經安裝好的模塊統稱為「標準庫
  • C++隨機排序容器中的元素
    作者:apocelipes連結:https://www.cnblogs.com/apocelipes/p/10351335.html在各種程序語言中都提供了將容器元素隨機排序的shuffle方法,c++
  • 標準庫函數與基於HAL庫函數
    開始學習51的時候有的人會直接選擇進行對單片機的寄存器進行操作,可以很好的理解單片機的工作原理,對於代碼的編寫也會後很好的理解,但是在stm32的時候操作寄存器就不太行了,因為stm32的寄存器是51的數十倍,如此多的寄存器根本無法全部記憶,開發時需要經常的翻查晶片的數據手冊,此時直接操作寄存器就變得非常的費力了。
  • C/C++中字符串與數字轉換
    作者:wxquare連結:https://www.cnblogs.com/wxquare/p/6529027.html本文總結了四種字符串和數字相互轉換的方法,方法一和方法二是c++中的方法,方法三和方法四是C語言庫函數的方法。
  • C++標準庫和std命名空間
    學習C++,除了學習語法,還要熟悉常用的類,這兩個方面花的時間都不少。後來C++引入了命名空間的概念,計劃重新編寫庫,將類、函數等都統一納入一個命名空間中(命名空間的名字是 std)。如果你希望使用 printf 函數,那麼應該引入 <cstdio>,並使用命名空間 std,如下所示:#include <cstdio>using namespace std;C++ 將標準庫中的所有類、函數等都放到了命名空間 std,一般在文件開頭使用 using 關鍵字聲明。
  • 必知必會|C++學習中的核心知識點總結
    < > 括起來,非標準庫的頭文件用雙引號 」 」 括起來。先初略地了解一下vector和iterator的概念,以後用到時深入學習,vector容器是一種類型,vector ivec表示保存int對象的類模板。Iterator也是一個類,vector::iterator iter;表示由vector定義的迭代器類型對象iter,用於遍歷容器中的元素。使用它們之前必須在文件頭包含並using聲明。
  • C++打怪 之 vector
    只不過vector將動態數組的一系列操作都封裝成標準庫的接口。如果我們將「vector」理解成*「vector + malloc」 ,就能夠分析出以上問題的原因:第一個問題理解。vector是一個指針,如果沒有初始化賦值,就是一個野指針。那麼在使用沒有初始化的vector,就如同在使用野指針,會導致宕機。
  • C++機器學習庫介紹
    C++是我學習過的第一種程式語言,我喜歡在機器學習中使用它。我在之前寫過關於構建機器學習模型的文章。我收到了一個回復,問我C++有沒有機器學習的庫?這是個公平的問題。像Python和R這樣的語言有大量的包和庫來滿足不同的機器學習任務。那麼C++有沒有這樣的產品呢?是的,是的!