⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itersample.c

📁 迭代器算法
💻 C
字号:
/* itersample.c --- demonstrate the usage of iterator */#include <stdlib.h>#include <stdio.h>#define STRV_NUMBER		5typedef struct _StringList{	char *str_array[STRV_NUMBER];} StringList;typedef struct _StringListIter StringListIter;typedef char* (*StringListIterGetStrFunc)(StringListIter* iter);typedef void  (*StringListIterNextFunc)(StringListIter* iter);typedef int   (*StringListIterIsDoneFunc)(StringListIter* iter);typedef struct _StringListIterInterface{	StringListIterGetStrFunc  iter_get_str;	StringListIterNextFunc    iter_next;	StringListIterIsDoneFunc  iter_is_done;} StringListIterInterface;struct _StringListIter{	StringListIterInterface	iface;	StringList*				str_list;	int						index;};typedef struct _StringListNormIter{	StringListIter  parent;} StringListNormIter;typedef struct _StringListRevIter{	StringListIter  parent;} StringListRevIter;static StringList static_string_list ={	.str_array = {"aaa", "bbb", "ccc", "ddd", "eee"}};StringList* string_list_new(void){	return &static_string_list;}static char* string_list_norm_iter_get_str (StringListIter* iter){	StringListNormIter* norm_iter;	norm_iter = (StringListNormIter*)iter;	return norm_iter->parent.str_list->str_array[iter->index];}static void string_list_norm_iter_next (StringListIter* iter){	StringListNormIter* norm_iter;	norm_iter = (StringListNormIter*)iter;	norm_iter->parent.index++;}static int string_list_norm_iter_is_done (StringListIter* iter){	StringListNormIter* norm_iter;	norm_iter = (StringListNormIter*)iter;	return norm_iter->parent.index >= STRV_NUMBER;}static char* string_list_rev_iter_get_str (StringListIter* iter){	StringListRevIter* rev_iter;	rev_iter = (StringListRevIter*)iter;	return rev_iter->parent.str_list->str_array[iter->index];}static void string_list_rev_iter_next (StringListIter* iter){	StringListRevIter* rev_iter;	rev_iter = (StringListRevIter*)iter;	rev_iter->parent.index--;}static int string_list_rev_iter_is_done (StringListIter* iter){	StringListRevIter* rev_iter;	rev_iter = (StringListRevIter*)iter;	return rev_iter->parent.index < 0;}char* string_list_iter_get_str (StringListIter* iter){	return iter->iface.iter_get_str (iter);}void string_list_iter_next (StringListIter* iter){	iter->iface.iter_next (iter);}int string_list_iter_is_done (StringListIter* iter){	return iter->iface.iter_is_done (iter);}StringListNormIter* string_list_get_norm_iter (StringList* list){	StringListNormIter* iter;	iter = (StringListNormIter*) malloc (sizeof (StringListNormIter));	iter->parent.str_list = list;	iter->parent.index = 0;	iter->parent.iface.iter_get_str  = string_list_norm_iter_get_str;	iter->parent.iface.iter_next	 = string_list_norm_iter_next;	iter->parent.iface.iter_is_done  = string_list_norm_iter_is_done;	return iter;}StringListRevIter* string_list_get_rev_iter (StringList* list){	StringListRevIter* riter;	riter = (StringListRevIter*) malloc (sizeof (StringListRevIter));	riter->parent.str_list = list;	riter->parent.index = STRV_NUMBER - 1;	riter->parent.iface.iter_get_str = string_list_rev_iter_get_str;	riter->parent.iface.iter_next	 = string_list_rev_iter_next;	riter->parent.iface.iter_is_done = string_list_rev_iter_is_done;	return riter;}static void list_all_string (StringListIter* iter){	for (; !string_list_iter_is_done (iter); string_list_iter_next (iter))	{		printf ("%s\n", string_list_iter_get_str (iter));	}}int main (int argc, char **argv){	StringList* str_list;	StringListNormIter* iter;	StringListRevIter*  riter;	str_list = string_list_new ();	printf ("Print all string:\n");	iter = string_list_get_norm_iter (str_list);	list_all_string ((StringListIter*)iter);	printf ("\nReverse print all string:\n");	riter = string_list_get_rev_iter (str_list);	list_all_string ((StringListIter*)riter);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -