C++基礎學習教程(一)

來源:互聯網
上載者:User

標籤:長度      將不   nat   sub   flags   功能   enter   end   

開始自己的C++複習進階之路。


聲明:

這次寫的博文純當是一個回想複習的教程。一些非常基礎的知識將不再出現。或者一掠而過,這次的主要風格就是示範範例代碼非常多~~~

全部代碼在Ubuntu 14.04 LTS版,GCC4.8.1(g++)編譯通過。其它的平台沒試過。預計有些代碼在VC6.0以下通過不了,由於有些語言特性是C++11標準的。

以下就是本文的開始吧。


一、C++必須說和必須略過的一些東西 1、工具

工具的話。簡答的編程貌似如今已經習慣了在GCC(g++)下了。Linux平台以下,一般不須要非常大的project的時候我都是用VIM寫好代碼,直接執行了。略微複雜一點的就用CodeBlocks。只是因為打字速度一般,認為VIM的編輯功能也不是非常強,所以通常是把代碼什麼的在VIM寫好,然後凝視文檔以及具體的閱讀改動的就直接上Sublime Text或者Gedit了。(Emacs還沒用到過, -_-||).

Windows以下的話。假設寫的代碼用不到C++11的新特性那就用VC6.0吧。CodeBlocks也能夠,只是寫這篇教程的時候我用的是VS2010的cmd編譯的。貌似Windows以下好多各種的編譯器。。。喜歡什麼用什麼吧。假設要用C++11特性的話。貌似CodeBlocks最新版本號碼的是能夠支援的。其它的編譯器布吉島。

所以。關於編譯器的問題,或者因為編譯器導致的問題,就不說了。麻煩。

2、代碼風格

代碼風格神馬的也貌似沒什麼能夠說的,無非是你的花括弧是怎麼括,你的運算子兩旁有沒有空格,你的凝視是寫在哪裡等等。。

關於我的風格在詳細的示範範例中能夠看粗來。

全部的風格僅僅要不要太標新立異或者奇葩的話。堅持你的風格就好啦。這個實在沒有什麼好說的。

3、文檔凝視

關於C++自己主動文檔產生我選擇了Doxygen,這個在Windows和Linux以下都能用,只是Windows以下還沒用,只是目測應該要比Linux以下好看和易用一點吧。

關於這個文檔的一些keyword和標準請查看官方文檔或者自行百度,Google一下。非常多人都寫了技巧和使用方法。

所以,關於文檔和凝視什麼不再解釋。


以下開始詳細的回想複習了。。

二、C++基礎 2.1整數運算式

程式示範範例:輸入一系列的整數,輸出其平均值。當輸入的數字小於0個的時候給出提示。

整數運算式這些的。實在不是必需多費口舌。

直接上代碼。

代碼例如以下:

/*************************************************************************    > File Name: list0301_int_exp.cpp    > Author: suool    > Mail: [email protected]     > Created Time: 2014年05月16日 星期五 21時06分20秒 ************************************************************************/#include<iostream>using namespace std;int main(){    int sum(0);    int count(0);    int x;    while(cin >> x)    {        sum += x;        count += 1;    }    if(count <= 0)    {        cout << count << endl;         cout << "The couunt is below zero !" << endl;    }    else     {        cout << count << endl;        cout << "Average = " << sum/count << endl ;    }    return 0;}

執行結果和示範範例略去。(當時執行的時候木有,如今也不想執行截了。)


2.2字串與簡單的輸入輸出

這一部分涉及到逸出字元,關於逸出字元,在C語言和其它語言裡面大家應該都灰常清楚了,所以,不再說了-_-||。

。。。

非常顯然C++的輸入輸出操作符>> & <<大家都明確的:操作符箭頭指向愛你過的方向是資訊流向的方向:從流到變數是輸入。從變數到流是輸入。

       以下是一個字串的簡單示範範例:一個簡單的人機互動對話。代碼入下:

/*************************************************************************    > File Name: list0502_cin_string.cpp    > Author: suool    > Mail: [email protected]     > Created Time: 2014年05月16日 星期五 21時23分43秒 ************************************************************************/#include<iostream>#include<string>using namespace std;int main(){    string name;    string response;    cout << "What‘s your name ?" << endl;    cin >> name ;    cout << "Hello " << name << ", how are you ?

" <<endl; cin >> response ; cout << name << "Good bye !" << endl;}



2.3格式化輸出(流程式控制制語句)

關於if或者while或者for等等迴圈控制語句沒有必要再講了吧。這些實在是看代碼都能看懂的東西。

僅僅要有點其它的語言基礎都沒問題的。

So。讓我們直接進入C++的格式化輸出。

我們首先要達到以下的輸出效果,要求就是寫出這個程式。

效果例如以下:


程式碼例如以下:

/*************************************************************************    > File Name: list0801_cout_format.cpp    > Author: suool    > Mail: [email protected]     > Created Time: 2014年05月16日 星期五 21時31分52秒 ************************************************************************/#include<iostream>#include<iomanip>using namespace std;int main(){    cout << " N    N^2    N^3" << endl;    // cout.flags(ios::left);    for (int i = 0; i < 21; i++ )    {        cout << setw(2) << i+1             << setw(7) << (i+1)*(i+1)             << setw(8) << (i+1)*(i+1)*(i+1)             << endl;    }    cout << "Finaish it !" << endl;    return 0;}

從上面的代碼應該就能夠看出,C++關於對齊的設定是使用cout.flags(ios::left);進行設定的,以下的程式中有第二種的設定方法,就是使用cout << right; 前提是聲明#include<ios>。

So。以下看一個略微複雜一點的格式化輸出,輸出的效果例如以下:(事實上就是乘法表。。)

效果例如以下:



程式碼例如以下:

/*************************************************************************    > File Name: list0807_table_cout.cpp    > Author: suool_hu    > Mail: [email protected]     > Created Time: 2014年05月17日 星期六 19時14分40秒 ************************************************************************/#include<iomanip>#include<iostream>#include<string>using namespace std;// 輸出10X10的一個乘法表int main(){    // 基本變數設定    int const min(1);    int const max(10);    int const colwidth(4);        // cout << ios::right;    // 列印表頭    cout << setw(colwidth) << ‘*‘ << ‘|‘;    for (int i=1; i<=max ; i++)        cout << setw(colwidth) << i;    cout << endl;    // 列印切割行    // 設定填充符    cout << setfill(‘-‘) << setw(colwidth) << ""         << ‘+‘         << setw(max * colwidth) << ""         << endl;        // 重設填充符    cout << setfill(‘ ‘);    // 列印每一行    for (int row=1; row<=max; row++)    {        cout << setw(colwidth) << row << ‘|‘;        for (int col= 1; col<=row; col ++)        {            cout << setw(colwidth) << row*col;        }        cout << endl;    }    return 0;}

以下的小程式是關於setw()函數和對其方式和預設填充方式設定的詳細表現的示範範例:

示範範例一:

/*************************************************************************> File Name: list0803.cpp> Author: suool_hu> Mail: [email protected]> Created Time: 2014年05月16日 星期五 22時56分42秒************************************************************************//** Using Alternative Fill Characters  */#include <iomanip>#include <iostream>#include <ostream>int main(){    using namespace std;        int day(16);    int month(5);    int year(2014);    int dollars(42);    int cents(7);        // Print date in USA order. Later in the book, you will learn how to    // handle internationalization. //setfill()填充方式設定    cout << "Date: " << setfill(‘0‘) << setw(2) << month         << ‘/‘ << setw(2) << day        << ‘/‘ << setw(2) << year << ‘\n‘;    cout << "Pay to the order of: CASH\n";    cout << "The amount of $" << setfill(‘*‘) << setw(8) << dollars << ‘.‘        << setfill(‘0‘) << setw(2) << cents << ‘\n‘;    return 0;}

效果例如以下:


示範範例二:

/*************************************************************************    > File Name: list0804_format_cout.cpp    > Author: suool_hu    > Mail: [email protected]     > Created Time: 2014年05月16日 星期五 21時56分42秒 ************************************************************************/#include<iostream>#include<iomanip>#include<string>#include<ios>using namespace std;// 格式化輸出練習int main(){    cout << ‘|‘ << setfill(‘*‘) << setw(6) << 1234 << ‘|‘ << endl;    cout << ‘|‘ << left <<         setw(6) << 1234 << ‘|‘ << endl;    cout << ‘|‘ <<                 setw(6) << 1234 << ‘|‘ << endl;    cout << ‘|‘ << right <<        setw(6) << 1234 << ‘|‘ << endl;    return 0;}

效果例如以下:


2.4數組和向量

如今我們要寫一個程式。要求實現:從標準輸入讀取數字,然後將數字排序後輸出,每行輸出一個。

有些人可能先想到的資料結構是用數組解決,只是。在C++中,數組是一種比較劣等的資料結構了,大多數時候我們都更傾向於使用C++的容器類型的資料結構。這個程式我們就能夠使用容器中的向量來解決,代碼例如以下:

/*************************************************************************    > File Name: list0904_iterator_alg.cpp    > Author: suool_hu    > Mail: [email protected]     > Created Time: 2014年05月18日 星期日 07時47分42秒 ************************************************************************/#include<algorithm>#include<iostream>#include<iterator>#include<string>#include<vector>using namespace std;// 適用迭代器和演算法讀入數字並排序(向量儲存)int main(){    cout << "請輸入數字:" << endl;    vector<int> data;    // 每次讀取一個數字    copy(istream_iterator<int>(cin),        istream_iterator<int>(),        back_inserter(data));    // 排序    sort(data.begin(), data.end());    cout << "您輸入的數位排序結果為:"<< endl;    // 列印向量,一行一個數字    copy(data.begin(), data.end(), ostream_iterator<int>(cout, "\n"));}

關於向量:

類型:在角括弧內部的是向量的類型vector<int> data;是int類型的向量

初始化:vector沒有大小,能夠隨時擴充和縮小,沒有數組的長度大小的限制。可是在初始化的時候依舊能夠聲明其長度大小,如:

Vector<int>  full_zero(10);    // 預設以0初始化,這個含有10個0的向量Vector<int> full_ten(41, 10);   // 包括41個10的向量。聲明以10初始化

Vector有非常多內建的方法,比方插入,刪除等等內建方法,詳細須要使用什麼方法請自行百度吧。

迭代器

上面的代碼中有一個調用的函數是sort,不要以為那個是vector的成員函數,那個事實上是C++ STL中的一個函數。能夠對全部傳遞給他的序列進行排序。僅僅要該類型能夠用比較操作符(即是大於或者小於),通過提供初始位置和末端位置。

關於上面的那個begin和end的位置。end是超出末端元素的下一個位置,例如以解:


Std::sort是泛型演算法的一個範例,之所以稱之為泛型,是由於這些函數實現了通用演算法而且具有一般性。

即是說。僅僅要可以表示成一個序列且資料可以比較。就能調用泛型演算法中函數。大部分在標頭檔<algorithm>中,一部分在<numeric>中。

差點兒全部的泛型都使用迭代器(唯一的例外是std::min & std::max,他們返回序列中最大最小值)。C++中總共同擁有五種迭代器。可是能夠分為兩類:讀迭代器和寫迭代器。

讀迭代器:指向值序列中的一個位置。使得能夠對該序列進行讀操作。

演算法對於輸入使用讀迭代器。且不改動值。一般而言,必須指定一對讀迭代器:開始位置和超出末端的下一個位置。

寫迭代器:指向序列中的一個位置。從該位置演算法開始寫輸出。

一般而言,僅僅須要指定輸出序列的位置就可以。

演算法不能檢查溢出,因此必須保證輸出序列有足夠的空間容納演算法要寫的全部內容。

Such as:  std::copy( )演算法從一個輸入序列中複製值到一個輸出序列。函數有三個參數:兩個讀迭代器以指定範圍。一集一個寫迭代器指定輸出範圍的開始位置,因此必需要保證輸出有足夠大的容量。






C++基礎學習教程(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.