植髮費用?大麥植髮婉之c++ vector容器
我們在宣告陣列的時候,採用的是datatype arrayname[len]的形式,陣列在分配之後,不能調整大小,刪除和插入資料時操作十分的繁瑣,雖然可以採用鍊錶,但是鍊錶的操作更麻煩,我們希望有更簡單的方法。
與string類一樣, 向量vector 同屬於stl(standard template library, 標準模板庫)中的定義的類, vector是乙個封裝了動態陣列的順序容器(sequence container),它能夠存放各種型別的資料和物件。
可以簡單的認為vector容器是乙個能夠存放任意型別的動態陣列,與陣列相比,vector 容器的優點在於它能夠根據需要自動調整的大小,隨時放入更多的元素。此外, vector 也提供了成員函式對自身進行操作。
首先,如果要在程式中使用vector容器,必須包含標頭檔案 。如下:
#includevector類是乙個模板類,位於std命名空間內,為方便使用還需要增加:
using namespace std;宣告乙個容器很簡單:
vectorvi; // 定義用於存放整數的容器vector容器可以存放c語言的基本資料型別,可以存放結構體,還可以存放類,這正是我們想要的簡單的方法,鍊錶?我已經有二十年沒有用它了。vectorvd; // 定義用於存放浮點數的容器
vectorvs; // 定義用於存放string字串的容器
vectorvgirl; // 定義用於存放超女結構體的容器
vectorvgirl; // 定義用於存放超女類的容器
vector的功能強大,成員函式很多,我不想按普通教程的方式來介紹它,那樣會太煩鎖,我根據實際開發中應用的場景,採用示例程式介紹vector常用的用法。
示例(book220.cpp)
/*void push_back(const t& x)成員函式:向容器尾部增加乙個元素x,x就是您要向容器中增加的變數,在本示例中是乙個整數,注意,引數x是乙個引用,要用變數的名稱,不是變數的位址,如vheight.push_back(height);。* 程式名:book220.cpp,此程式用於演示c++容器存放整數
*/#include #include // vector需要的標頭檔案
#include // sort函式需要的標頭檔案
int main ()
for (int ii=0;ii執行效果
程式解釋如下:
std::vectorvheight; // 宣告容器用於存放整數,超女身高,單位是cm。
int size()成員函式:返回容器中資料的元素總數。
像陣列一樣訪問容器:容器像陣列一樣,可以用陣列的下標訪問,vheight[0]表示容器的第1個元素,vheight[n]表示容器的第n+1個元素。注意,採用下標方式放問容器的時候,下標不要越界,否則可能會引起記憶體溢位。
iterator begin()成員函式:返回容器頭指標,指向第乙個元素。
iterator end()容器中的元素排序:採用sort()函式對容器中的元素進行排序。如sort(vheight.begin(),vheight.end());表示對容器中全部的元素進行排序。
void clear():清空容器中的全部元素,注意兩點:1)容器被宣告的時候,本來就是空的;2)容器是類,有析構函式,析構函式中會自動清空容器中的元素,釋放記憶體資源,不需要程式設計師擔心。但是,程式設計師也可以調clear()函式手工清空容器中的元素。
示例book220.cpp程式展示了vector容器10%的功能和成員函式,但是,在實際開發中,對容器的操作,95%的內容就是這些。
示例(book222.cpp)
/*注意:* 程式名:book222.cpp,此程式用於演示c++容器存放字串
*/#include #include #include // string需要的標頭檔案
#include // vector需要的標頭檔案
int main ()
for (int ii=0;ii執行效果
注意幾個問題:
1)用容器存放字串,資料型別用string,不是c語言用0結尾的字元陣列char ,string是乙個變數,char 是一組變數。
2)用vname.push_back()成員函式把資料追加到容器中,引數的型別可以是string,也可以是char,但是,這並不是vector的特徵,而是string的特徵,容器宣告的是string型別,string的建構函式支援char ,表面上看push_back()進去的是char ,實際上會被轉換為string。
示例(book225.cpp)
/** 程式名:book225.cpp,此程式用於演示c++容器存放結構體
*/#include #include #include // vector需要的標頭檔案
struct st_girl // 超女資料結構;
int main ();
// 自定義排序函式,按超女姓名排序
bool sortbyname(const st_girl &p1,const st_girl &p2)
// 自定義排序函式,按超女年齡排序
bool sortbyage(const st_girl &p1,const st_girl &p2)
(1)隨機數的種子不能只用time(0)的秒,還可以利用微秒,同一秒內取到的隨機數將不同。
(2)rand(const int minvalue,const int maxvalue,const int totalcount,const bool brep=true)生成指定範圍的隨機數,minvalue是最小值,maxvalue是最大值,brep是否允許重複。
4)vector容器的排序在實際開發中應用比較多,必須掌握。
5)vector容器存放超女類,能不寫排序函式嗎?如果存放string類,能不寫排序函式嗎?為什麼?
大麥植髮婉之C語言巨集定義
植髮多少?大麥植髮婉之c語言巨集定義 巨集 macro 是預處理命令的一種,它允許用乙個識別符號來表示乙個字串。先看乙個例子 include define n 100 int main 執行結果 120該示例中的語句int sum 20 n n被100代替了。define n 100就是巨集定義,n...
大麥植髮婉之C 類的繼承與派生
植髮多少?大麥植髮婉之c 類的繼承與派生 繼承是物件導向程式設計中最重要的乙個概念。繼承允許我們根據乙個類來定義另乙個類,達到了 功能重用效果。當建立乙個類時,如果待建立的類與另乙個類存在某些共同特徵,程式設計師不需要全部重新編寫成員變數和成員函式,只需指定繼承另乙個類即可,被繼承的類稱為基類或父類...
大麥植髮婉之資料型別和關鍵字
在程式的世界中,承載一系列的資訊的數字和字元都屬於資料型別,但計算機需要一種方法來區別和使用這些不同的型別。具體的,c通過識別一些基本的資料型別做到這些。如果是常量資料,編譯器一般通過其書寫來辨認其型別,比如 123是整數,3.14浮點數 即小數 而變數則需要在宣告語句中指定其型別,稍後會做詳細介紹...