C实现的类似vector的容器
来源:互联网 发布:普通电视怎么连接网络 编辑:程序博客网 时间:2024/04/30 08:46
一、前言
以下为C语言实现的类似C++的STL中vector的容器
二、代码
////////////cvector.h////////////////////////////////#ifndef VECTOR_H#define VECTOR_H#include <stdlib.h>#include <assert.h>/////////结点存放自己的数据结构//////////typedef struct{char name[10];int id;}node;typedef struct VectorSt {int size;int maxSize;node *data;} *Vector;Vector VectorNew(void);void VectorPushBack(Vector v, node e);node VectorPopBack(Vector v);node VectorGet(Vector v, int index);int VectorSize(Vector v);int VectorMaxSize(Vector v);void VectorRm(Vector v, int index);void VectorDelete(Vector v);#endif
////////////cvector.c////////////////////////////////#include "cvector.h"Vector VectorNew(void){Vector v = (Vector)malloc(sizeof(struct VectorSt));assert(v != NULL);v->size = 0;v->maxSize = 32;v->data = (node *)malloc(sizeof(node)* v->maxSize);assert(v->data != NULL);return v;}void VectorPushBack(Vector v, node e){assert(v != NULL);if (v->size >= v->maxSize) {v->maxSize *= 2;v->data = (node *)realloc(v->data, v->maxSize * sizeof(node));assert(v->data != NULL);}v->data[v->size++] = e;}node VectorPopBack(Vector v){assert(v != NULL && v->size > 0);return v->data[--v->size];}node VectorGet(Vector v, int index){assert(v != NULL && index >= 0 && index < v->size);return v->data[index];}int VectorSize(Vector v){assert(v != NULL);return v->size;}int VectorMaxSize(Vector v){assert(v != NULL);return v->maxSize;}void VectorRm(Vector v, int index){assert(v != NULL || index <= v->size - 1);int i;if (index< v->size - 1){for (i = index; i < v->size - 1; ++i)v->data[i] = v->data[i + 1];v->size--;}else{v->size--;}}void VectorDelete(Vector v){assert(v != NULL && v->data != NULL);free(v->data);free(v);}
////////////main.c/////////#include "cvector.h"#include <stdio.h>int main(){Vector v = VectorNew();node e1 = {"lili" , 1111};node e2 = { "Mario", 2222 };node e3 = { "Lucy", 3333 };VectorPushBack(v , e1);VectorPushBack(v, e2);VectorPushBack(v, e3);printf("the size of v is :%d\n", VectorSize(v));int i;printf("The id value of all nodes in v is :");for (i = 0; i < VectorSize(v); ++i){printf("%d ", VectorGet(v , i).id);}printf("\n");VectorDelete(v); return 0;}三、运行结果
0 0
- C实现的类似vector的容器
- C++ - 类似"vector"容器(存储string) 的 实现
- vector容器的实现
- C++ Vector容器的实现
- Vector容器的简单实现
- C语言实现类似于C++的Vector容器
- 【C++】实现容器Vector
- vector的实现【C++】
- c/c++实现的一个动态分配内存的结构体数组(类似vector)
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- c++STL容器vector的复制
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- Vmware12下基于CentOS 7.0安装LAMP
- C++拷贝构造函数详解
- c语言中sizeof struct和sizeof union
- Codeforces Round #366 (Div. 2)B
- 多线程——用Lock(锁)和Condition(监听器)来优化生产者消费者模式(进一步优化,解决可能产生的死锁问题)
- C实现的类似vector的容器
- POJ 1067 HDU 1527 取石子游戏(威佐夫博奕)
- hdu 1283
- 自定义UICollectionView布局
- ionic开发环境示例
- Android开发之浅谈java虚拟机和Dalvik虚拟机的区别
- Java编程简单的倒计时器
- 后台查询的数据传到前台为数据为空!导流程提交报空指针错误!
- Media Data之多媒体扫描过程分析(二)