可以保存浮点、整数、字符等数据和算法的链接表应该很好,并且不是很复杂
我想创建一个具有空指针的结构,该结构将指向后续节点。但问题是我不能使用有结构的模板。
至于c,我必须测试用户输入的每个字符,以测试它是整型、浮点型、字符还是not.then,我们可以继续下去。
请建议一个有效的算法/代码
发布于 2011-12-08 03:01:10
如果您想自己这样做,那么您基本上需要创建一个元素的数组或链接表,对数据和数据类型进行编码。您可以使用包含类型指示符和要处理的各种类型的联合的结构,并创建该结构的数组或链表:
typedef struct {
int type_indicator;
union {
float f;
int i;
double d;
void *p;
char c;
}
} generic_item;
generic_item generic_array[10];我将留给您为类型指示器设计一个适当的枚举,并为您的算法添加一个函数指针。如果你想要一个链表而不是数组,你显然还需要添加一个generic_item *next指针。
我还没有看过其他答案链接到的boost选项,但在尝试推出自己的解决方案之前,我可能会先看一看。
发布于 2011-12-08 02:47:55
注意:这是一个纯C语言的答案。
这个数据结构就是我一开始要做的:
typedef struct heterogeneous_list
{
enum { CHAR, STRING, FLOAT, INT } type;
void *item;
struct heterogeneous_list *next;
}当我从用户那里获得项目时,我会将其存储在列表中(假设当前指向列表的末尾):
current->next = malloc(sizeof(heterogeneous_list));
case (/* whether the user entered a char, string, float, or int */
{
case /* char */:
current->next.item = malloc(sizeof(char));
current->next.type = CHAR;
current->next.next = NULL;
break;
/* and so forth, for string, int, and float */
}
current = current->next;在遍历列表时,现在很容易根据类型处理列表中的内容。下面的代码假设current是迭代(遍历列表的for循环)中正在查看的列表中的当前项:
char currentItemChar;
char * currentItemString;
float currentItemFloat;
int currentItemInt;
case (current->type)
{
case CHAR:
currentItemChar = *((char*) current->item);
// process a character
break;
case STRING:
currentItemString = (char*) current->item;
// process a string
break;
case FLOAT:
currentItemFloat = *((float*) current->item);
// process a float
break;
.
.
.
};这就是我会做的。
发布于 2011-12-08 02:55:22
使用boost::variant或boost::any。这取决于你的需要。
https://stackoverflow.com/questions/8420744
复制相似问题