C語言物件導向之STL庫 Vector

2021-08-09 21:26:15 字數 2506 閱讀 8756

我們這裡說的vector是之c++語言中的vector.vector 是c++標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結果和演算法的模板類和函式庫,vector是乙個容器,他能夠存放各種型別的物件,簡單的說,vetor是乙個能夠存放任何資料型別的動態陣列,可以動態改變記憶體大小。

方法

說明clear()

移除容器中所有資料。

empty()

判斷容器是否為空

erase(pos)

刪除pos位置的資料

erase(beg,end)

刪除[beg,end)區間的資料

front()

傳回第乙個資料。

insert(pos,elem)

在pos位置插入乙個elem拷貝

pop_back()

刪除最後乙個資料。

push_back(elem)

在尾部加入乙個資料。

resize(num)

重新設定該容器的大小

size()

回容器中實際資料的個數。

begin()

返回指向容器第乙個元素的迭代器

end()

返回指向容器最後乙個元素的迭代器

在這裡我看到了c++中常用的方法,那麼我們現在為讓老死黨c語言也同樣擁有這樣強大的能力,那麼我們遍開始構建屬於自己的vector.這裡我們使用前面一篇文章給出的c語言基類cssobj來建立這個vector。(這裡我只是簡單給出幾個常用的方法出來,如有不對的地方請指教,小弟小白一枚)。在寫乙個資料結構之前,我們首先需要知道這個資料結構的記憶體模型是怎樣的。

vector的記憶體結構有點像棧的記憶體結構,先進後出.我們可以從上面的方法表中可以看到,pop_back() 方法和push_back()方法中可以看出,其最基本的記憶體模型是棧結構。

這裡我們使用物件導向的繼承特性,繼承基類的所有基本操作。

詳細可以參考我前面的文章c語言物件導向之基類

我們廢話少說直接上**(這裡只實現的部分功能)

/*

* cssvector.h

* * created on: 2023年10月18日

* author: jasonhuo

*/#ifndef security_cssvector_h_

#define security_cssvector_h_

#ifdef __cplusplus

extern "c"

#endif

#endif /* security_cssvector_h_ */

/*

* cssvector.c

* * created on: 2023年10月18日

* author: jasonhuo

*/#include "cssvector.h"

//記憶體清理函式

static void cssvectorondelloc(cssvector * _this)

static int vecisfull(cssvector *_this)

static int vecresize(cssvector *_this)

return ret;

}static int vecpush_back(cssvector *_this,void *pvalue)

//將新來的資料拷貝到個容器當中

memcpy(_this->_mend,pvalue,_this->mtypesize);

_this->_mend +=_this->mtypesize;

_this->msize++;

_this->_musedmemlen+=_this->mtypesize;

return vec_ret_success;

}static int vecpop_back(cssvector *_this)

return ret;

}static void *vecat(cssvector *_this,int index)

return atptr;

}static int vecclear(cssvector *_this)

static int vecmodifyat(cssvector *_this,int index,void *pvalue)

cssvector *cssvectorinit(cssvector *_this,int typesize,int elemnum)

return _this;

}cssvector *cssvectorcreat(int typesize,int elemnum)

C 物件導向以及STL雜談

繼承多型 動態多型 模板stl 關聯容器 封裝是什麼 隱藏物件的屬性和實現細節,僅對外公開介面和物件進行互動,將資料和運算元據的方法進行有機結合 c 語言中,強化了c語言的封裝特性,對內開放資料,對外遮蔽資料 提供介面 函式是封裝的一種形式 函式所執行的細節行為被封裝在函式本身這個更大的實體中,被封...

C語言學習筆記之C 物件導向

include include includevoid main void display cout num 所謂的繼承就是在乙個已存在的類基礎上建立乙個新的類。已存在的類稱為基類 父類 新建的類稱為 派生類或子類 派生類或子類繼承了父類所有資料成員和成員函式,並增加新的成員。公用派生類 inclu...

C語言的物件導向

看了qualcomm的 inte ce,決定把它抄下來。主要還是方便日後查詢。1.define the structure of virtual function table 2.define the structure of class 3.about the size of structure ...