容器vector改寫為用C來實現

2022-08-16 20:06:14 字數 2226 閱讀 7659

在將hm的c++**改為c的過程中,hm中有stl庫中的容器型別list ,vector等。

下面的**是將vector型別使用c來實現,具體的函式對應參考檔案 vector 中的原始碼實現。

vector 實際上是乙個容量可以動態變化的陣列型別,保證了元素儲存空間的連續性,陣列的大小又可以動態的改變。使用size來指示實際元素的數目,capacity指示容量的大小。當capacity不夠時就要重新分配記憶體,這些元素插入及刪除的操作都需要記憶體的移動。

#ifndef __vector_int__

#define __vector_int__

#include

#include

#include

#include

typedef struct vector_int

vector_int;

inline vector_int* vector_int_constructor(vector_int* thisptr)

if (thisptr)

return thisptr;

}inline void vector_int_destructor(vector_int* thisptr)

thisptr->size=0;

thisptr->capacity=0;

}inline int* vector_int_front(vector_int* thisptr)

inline int* vector_int_back(vector_int* thisptr)

inline int* vector_int_begin(vector_int* thisptr)

inline int* vector_int_end(vector_int* thisptr)

inline unsigned long vector_int_size(vector_int* thisptr)

static inline unsigned int _grow_to(vector_int* thisptr,unsigned int _count)

static inline void reserve(vector_int* thisptr,unsigned int _count)

memcpy(_ptr,thisptr->data,sizeof(int)*thisptr->size);

if (thisptr->data != 0)

thisptr->capacity = _count;

thisptr->data = _ptr;}}

static inline void _reserve(vector_int* thisptr,unsigned int _count)

inline void vector_int_push_back(vector_int* thisptr,int _val)

//乙個元素插入到 pos 指示的位置之前,返回x的新位置

inline int* vector_int_insert1(vector_int* thisptr,int* position, int x)

else

return vector_int_begin(thisptr) + n;

}inline void vector_int_insert(vector_int* thisptr,int* position,int* first,int* last)}//

刪除[beg,end)區間的資料,傳回下乙個資料的位置。

inline int* vector_int_erase(vector_int* thisptr,int* _first,int* _last)

for(_ptr=_first;_ptr<_last;_ptr++)

thisptr->size -= (_last-_first) ;

}return (_first);

}inline void vector_int_clear(vector_int* thisptr)

inline void vector_int_resize(vector_int* thisptr,unsigned int _newsize)}//

演算法庫中的 search_n函式

inline int* vector_int_search_n(int* _first1, int* _last1,

int _count, int _val)

return (_last1);

}#endif

C 容器vector 理解

通過設定一些模版類,stl容器對最常用的資料結構提供了支援,這些模板的引數允許我們指定容器中元素的資料型別,可以將我們許多重複而乏味的工作簡化。與string 類一樣vector 類是隨標準c 引入的標準庫的一部,為了使用vector 我們必須包含相關的標頭檔案。向量 vector 連續儲存的元素 ...

用vector容器給map排序

題目描述 找尋一堆資料中哪個資料出現的最多 第一種思路 用c語言直接存放陣列 第二種思路 用map存放,存放到vector中 vector容器 中關於map物件的排序 struct cmpbyvalue 降序是 因此先判斷value,從大到小排序,如果value相同,則排序key bool cmp ...

c 中的vector容器

在c 中,vector是乙個十分有用的容器,下面對這個容器做一下總結。1 基本操作 1 標頭檔案 include.2 建立vector物件,vectorvec 3 尾部插入數字 vec.push back a 4 使用下標訪問元素,cout 5 使用迭代器訪問元素.vector iterator i...