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;
};
...全文
440 6 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
... 顶多用指针来装箱拆箱吧,反正不爽.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧