用c实现vect容器

上传人:kms****20 文档编号:40517186 上传时间:2018-05-26 格式:DOC 页数:11 大小:37.50KB
返回 下载 相关 举报
用c实现vect容器_第1页
第1页 / 共11页
用c实现vect容器_第2页
第2页 / 共11页
用c实现vect容器_第3页
第3页 / 共11页
用c实现vect容器_第4页
第4页 / 共11页
用c实现vect容器_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《用c实现vect容器》由会员分享,可在线阅读,更多相关《用c实现vect容器(11页珍藏版)》请在金锄头文库上搜索。

1、用用 C C 实现实现 vectvect 容器容器用 C 实现的 Vect,主要是以指针和数据长度来操作传入数据。/*/#ifndef _C_VECTOR_H_#define _C_VECTOR_H_/default ELEM#include #include #include typedef struct c_vectunsigned int size;unsigned int capacity;char* elem;int elem_size;c_vect;c_vect* c_vect_constructor(c_vect* thisptr,int _elemsize);void c_ve

2、ct_destructor(c_vect* thisptr);/get the first elemchar* c_vect_first(c_vect* thisptr);char* c_vect_back(c_vect* thisptr);char* c_vect_end(c_vect* thisptr);char* c_vect_begin(c_vect* thisptr);unsigned long c_vect_size(c_vect* thisptr);/alloc the memorystatic void reserve(c_vect* thisptr,int _Capacity

3、);static _Grow_to(c_vect* thisptr,unsigned int _Count);static void _Reserve(c_vect* thisptr,int _Count);void c_vect_push_back(c_vect* thisptr,char* _Val);/在某个指定的位置插入一个元素char* c_vect_insert1(c_vect* thisptr,char* position,char* _Val);/在某个位置插入一段元素void c_vect_insert(c_vect* thisptr,char* postion,char*

4、first,char* last);/删除_first _last 之间的数据,返回下一个数据的位置char* c_vect_erase(c_vect* thisptr,char* _First,char *_Last);void c_vect_clear(c_vect* thisptr);void c_vect_resize(c_vect* thisptr,unsigned int _Newsize);/在某个区间查找两个迭代器中,某个数据出现的次数char* c_vect_search_n(c_vect* thisptr,char* _First,char* _Last,int _Coun

5、t,char* _Val);char* c_vect_find(c_vect* thisptr,char *_Val);#endifC 文件#include “c_vector.h“c_vect* c_vect_constructor(c_vect* thisptr,int _elemsize)if(thisptr=NULL)thisptr=(c_vect*)malloc(sizeof(c_vect);if(thisptr)thisptr-capacity=0;thisptr-size=0;thisptr-elem=NULL;thisptr-elem_size=_elemsize;return

6、 thisptr;void c_vect_destructor(c_vect* thisptr)if(thisptr-elem)free(thisptr-elem);thisptr-elem = NULL;thisptr-size=0;thisptr-capacity=0;/get the first elemchar* c_vect_first(c_vect* thisptr)/返回第一个 elem 的地址return char* c_vect_back(c_vect* thisptr)return char* c_vect_end(c_vect* thisptr)return char*

7、c_vect_begin(c_vect* thisptr)return unsigned long c_vect_size(c_vect* thisptr)return thisptr-size;/alloc the memorystatic void reserve(c_vect* thisptr,int _Count)/may have some problem!/*if(thisptr-capacityelem,thisptr-elem_size*_Capacity);if(thisptr-elem)fprintf(stderr,“cannot alloc memory for elem

8、“);exit(0);thisptr-capacity=_Capacity;*/char* _ptr; if (thisptr-capacity elem_size)*_Count);/注意要用 sizeof(int)* if(_ptr=NULL) printf(“memory malloc failed!n“); exit(0); memcpy(_ptr,thisptr-elem,thisptr-elem_size*thisptr-size); if (thisptr-elem != 0) / destroy and deallocate old array free(thisptr-ele

9、m); thisptr-capacity = _Count; thisptr-elem = _ptr; static _Grow_to(c_vect* thisptr,unsigned int _Count)unsigned int _Capacity=thisptr-capacity;_Capacity=_Capacity+_Capacity/2;if( _Capacity size; if (_Size += _Count) thisptr-capacity) reserve(thisptr,_Grow_to(thisptr,_Size);void c_vect_push_back(c_v

10、ect* thisptr,char* _Val)if(thisptr-size=thisptr-capacity)_Reserve(thisptr,1);memcpy(/thisptr-size+; /在某个指定的位置插入一个元素char* c_vect_insert1(c_vect* thisptr,char* position,char* _Val)int i;int n = (position - c_vect_begin(thisptr)/thisptr-elem_size;if(position=c_vect_end(thisptr)c_vect_push_back(thisptr,

11、_Val);elseif(thisptr-size=thisptr-capacity)_Reserve(thisptr,1);for(i=thisptr-size-1;i=n;i-)memcpy(memcpy(return c_vect_begin(thisptr)+n*thisptr-elem_size;/在某个位置插入一段元素void c_vect_insert(c_vect* thisptr,char* postion,char* first,char* last)char* pos = postion;for(;first!=last;first+thisptr-elem_size)/

12、可能存在重新分配内存空间,所以必须返回 pospos=c_vect_insert1(thisptr,pos,*first);pos+thisptr-elem_size;/删除_first _last 之间的数据,返回下一个数据的位置,first 与last 年必须为 elem 上的地址值!char* c_vect_erase(c_vect* thisptr,char* _First,char* _Last)char* ptr;int i;if(_First!=_Last)if(_First_Last|_Firstelem0|_Lastc_vect_end(thisptr)printf(“c_v

13、ect_erase errorn“);exit(0);/i move distancei=(_Last-_First)/thisptr-elem_size;for(ptr=_First;ptr elem_size) if(ptr+i*thisptr-elem_size)elem_size,thisptr-elem_size);else break; thisptr-size -=i; return (_First);void c_vect_clear(c_vect* thisptr)c_vect_erase(thisptr,c_vect_begin(thisptr),c_vect_end(th

14、isptr);void c_vect_resize(c_vect* thisptr,unsigned int _Newsize)if(thisptr-size _Newsize)c_vect_erase(thisptr,c_vect_begin(thisptr)+_Newsize*thisptr-elem_size,c_vect_end(thisptr);else_Reserve(thisptr,_Newsize-thisptr-size);memset(thisptr-elem+thisptr-size*thisptr-elem_size,0,thisptr-elem_size*(_News

15、ize-thisptr-size);thisptr-size=_Newsize;/在某个区间查找两个迭代器中,某个数据第 N 次出现的位置(返回的是迭代器)char* c_vect_search_n(c_vect* thisptr,char* _First,char* _Last,int _Count,char* _Val)char *Mid1;int _Count1;if(_Countelem_size)=0) Mid1=_First;for(_Count1=_Count; ; ) if (-_Count1 = 0) return (_First); else if (Mid1+=thisptr-elem_size) = _Last)return (_Last); else if(strncmp(Mid1,_Val,8*thisptr-elem_size)!=0)break;_First = Mid1; _First+=thisptr-elem_size; return(_Last);char* c_vect_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号