社区
C语言
帖子详情
c语言实现stl
zengjie_0_2001
2006-11-03 08:29:29
请问怎么用c实现stl
用宏?
类似这样:
#define int ok
struct list
{
#ifdef int
int i;
#elifdef char
char str;
#else
char *string;
#endif
struct list *next;
};
...全文
491
6
打赏
收藏
c语言实现stl
请问怎么用c实现stl 用宏? 类似这样: #define int ok struct list { #ifdef int int i; #elifdef char char str; #else char *string; #endif struct list *next; };
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rickerliang
2006-11-05
打赏
举报
回复
~~
youngphoneix
2006-11-05
打赏
举报
回复
这是我的一个开源项目,目的就是用C实现STL
http://gforge.osdn.net.cn/projects/ylib/
adintr
2006-11-04
打赏
举报
回复
C 没有操作符重载,如何实现 iterator, functor?
mLee79
2006-11-04
打赏
举报
回复
C 比stl自由多了, 用啥 stl , 最简单的可以这样 ....
#include <stdio.h>
#include <stdlib.h>
#define XDS_slist_init( __h__ ) ((__h__)->xd_next = (__h__))
#define XDS_slist_erase_after( __n__ , __f__ ) \
do { \
void* __p_next_node__ = (void*)(__n__)->xd_next; \
(__n__)->xd_next = (__n__)->xd_next->xd_next; \
__f__ ( __p_next_node__ ) ; \
} while(0)
#define XDS_slist_pop_front( __h__ , __f__ ) XDS_slist_erase_after( __h__ , __f__ )
#define XDS_slist_insert_after( __n__ , __p__ ) \
do { \
(__p__)->xd_next = (__n__)->xd_next; \
(__n__)->xd_next = (__p__); \
} while(0)
#define XDS_slist_push_front( __h__ , __p__ ) XDS_slist_insert_after( __h__ , __p__ )
#define XDS_slist_cleanup( __h__ , __f__ ) \
do { \
void* __p_first_node__ ; \
while( 1 ) \
{ \
XDS_slist_pop_front( __h__ , __p_first_node__ = ); \
if( (__h__) == __p_first_node__ ) break; \
__f__ ( __p_first_node__ ); \
} \
} while(0)
#define XDS_slist_for_each( __h__ , __n__ ) \
for( (__n__) = (__h__)->xd_next; (__h__) != (__n__); (__n__) = (__n__)->xd_next )
struct testList
{
struct testList * xd_next;
int xxTmmd;
};
void foobar()
{
int i;
struct testList l , *p;
XDS_slist_init( &l );
for( i = 0; i < 10; ++i )
{
if( NULL == ( p = malloc( sizeof( *p ) ) ) )
exit(2);
p->xxTmmd = i;
XDS_slist_push_front( &l , p );
}
XDS_slist_for_each( &l , p )
printf( "%d --> " , p->xxTmmd );
printf( "NULL\n" );
p = l.xd_next->xd_next;
XDS_slist_erase_after( p , free );
XDS_slist_for_each( &l , p )
printf( "%d --> " , p->xxTmmd );
printf( "NULL\n" );
XDS_slist_cleanup( &l , free );
}
int main()
{
foobar();
}
chenzhichao2008
2006-11-04
打赏
举报
回复
你是要实现模板吧
agaric
2006-11-03
打赏
举报
回复
... 顶多用指针来装箱拆箱吧,反正不爽.
STL
的
C语言
实现
-----libc
stl
libc
stl
简介 libc
stl
是一个应用于
C语言
编程的函数库,它将编程过程中经常使用的数据结构如向量、链表、集合、树等封 装成相应的数据结构并提供一系列的操作函数来操作保存在这些数据结构中的数据,同时它还将常用的算法如 排序、查找、划分等封装成相应的算法函数并提供迭代器来使两者之间建立联系方便使用。从libc
stl
的名字 就可以看出它于
STL
有一定的关系,是的libc
stl
的接口和
实现
都
C语言
实现
STL
:vector(动态数组)
C语言
实现
动态数组的原理并不复杂,只需要
实现
数组元素的插入和删除、随机访问以及根据当前数组内元素数量自动调整数组占用内存大小的功能即可。唯一的难点在于存储不同类型的数据。C++
STL
中的vector利用了C++的模板功能,能够存储任意类型数据,而想要在
C语言
中
实现
类似的功能,就需要利用到void*指针。void*指针只存储一个地址,而不关心这个地址内存储的数据类型,因此我们只需要按照不同数据类型的字节数来访问void*中的数据。例如,如果我们要动态分配一块内存给一个int数组,常规做法就是使用。
C语言
实现
仿
STL
泛型链表的详细教程
void *data;// 指向节点数据的指针// 指向下一个节点的指针在这个结构体定义中,void *data是关键,它使得结构体可以指向任意类型的数据,从而
实现
泛型的功能。这种方式的一个主要好处是它提供了类型安全,因为它仍然要求在编译时明确数据类型,但它允许将不同类型的数据存储在同一个结构体类型中。在本章节中,我们探讨链表的基础操作,这包括如何开始一个链表以及何时结束一个链表的生命周期。我们将深入到每个函数的定义和
实现
细节,并解释其背后的原理。初始化链表是构建任何链表操作的基础。
C语言
环境下
实现
类似C++
STL
list的数据结构
在现代编程实践中,C++的
STL
(Standard Template Library)提供了强大的数据结构和算法支持,而std::list是其中的一个关键组件,它是一个双向链表容器,支持高效的插入和删除操作。尽管
C语言
本身不直接支持
STL
中的std::list,但我们可以通过
C语言
的结构体和指针来模拟
实现
类似的功能。本章将概述
C语言
如何模拟std::list的基本原理和
实现
方法,为接下来更深入的探讨其数据结构和操作细节奠定基础。
C语言
模拟std::list。
C语言
实现
双向链表和仿
STL
迭代器
私有的userdata在公共的linklist的基础上进行
实现
,并通过将link_list_node作为结构体的第一个元素,来方便
实现
运行时的结构体地址转换。队列数据结构的一个基本
实现
方式是使用双向链表进行
实现
。本文展示了一种在
C语言
中
实现
双向链表,以及参考C++
STL
的操作接口
实现
迭代器接口。先从使用示例开始,其中引用的linklist是公共
实现
,userdata是私有
实现
。链表的头文件声明,依次是迭代器接口、创建链表和结点的接口、销毁接口。另外按照链表的迭代器接口,
实现
顺序访问链表、反向访问链表。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章