在將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...