Die*_*Epp 47
按今天的标准来看,C似乎并不常见,因为没有定义有用的数据结构.没有.甚至不是字符串 - 如果你认为C字符串是一个数据结构,那么我们就不得不对"数据结构"的含义持不同意见.
如果您喜欢C,那么将其视为"空白板块"...您的整个应用程序由您编写的代码和您选择引入的库组成,还有一些相当原始的标准库函数,可能有一两个例外情况qsort.人们现在使用C来实现Python,Ruby,Apache或Linux内核之类的东西.这些项目无论如何都使用了他们自己的所有数据结构,他们不太可能使用类似STL的东西.
许多C库实现了通用哈希表.有权衡,你可以选择自己喜欢的.其中一些可以使用回调进行配置.
如果所有这些库都能满足您的需求,那么将哈希表添加到C标准中有什么意义呢?
pax*_*blo 39
标准C库中没有哈希表,因为:
这就是ISO的工作方式.提案被提出并被接受或拒绝.
您必须小心添加到标准库的内容,因为您有两个冲突的组.作为用户,您可能希望将太阳下的每个数据结构添加到标准中,以使该语言更有用.
但是,作为一个语言实现者(顺便说一下,这些可能是那些倾向于组成大多数工作组的人,因此他们的观点可能会产生更大的影响),你真的不想要必须实施的麻烦每个人都不会使用的东西.C89出现时所有的东西都与这样一个事实有关,即主要目的是编纂现有的做法,而不是引入新的做法.从那以后,标准的所有迭代都可以做得更自由,但向后兼容性仍然是一个重要问题.
我自己,我也有冲突.我很乐意在C语言中拥有Java,C++或Python库的所有功能.当然,这会让新手学习一切变得更加困难,而且正如一位评论者所说,可能会让它变得如此代码猴可以抽出有用的代码,减少我在这个过程中的价值:-)
而且我几乎拥有我需要的所有数据结构,从我的长期和(大部分)辉煌的职业生涯中.你不仅限于这种东西的标准库.有很多第三方工具可以完成这项工作,(像我一样)你也可以自己动手.
如果您想知道为什么在每次迭代中做出某些决定,ISO(最初是ANSI,在ISO接管之前)通常会发布基本原理文档.可以在这里找到ANSI的C89 .它包含范围内的这个小美:
本基本原理主要侧重于基础文档中所述的语言的添加,说明和更改.这不是C语言整体的理由:委员会负责编纂现有语言,而不是设计新语言.在此基本原理中没有尝试保护语言的预先存在的语法,例如声明的语法或运算符的绑定.
我特别欣慰地承认,他们对任何可能早于标准化的邪恶混乱都不负责任.
但是,也许你的问题的真正答案在于这一点,指导原则之一:
保持C的精神.委员会将保持C的传统精神作为一个主要目标.C的精神有许多方面,但其实质是C语言所依据的基本原则的社区情感.C精神的一些方面可以概括为以下短语:
第三个可能是图书馆没有通过最初的标准化努力大规模扩展的主要原因 - 而且,委员会的这种扩展可能导致ANSI C被标记为C2038而不是C89.
caf*_*caf 11
标准C库不包含任何大型,持久的数据结构 - 既不是列表,也不是树,也不是堆栈,也不包括哈希表.
如果不向原始C库的作者询问,就不可能给出确定的答案.然而,一个可能的解释是这样的数据结构的实施涉及各种权衡,只有应用程序的作者是在正确的位置,以使这些权衡.
请注意,POSIX标准C库确实指定了通用哈希表函数:hcreate(),hsearch()和hdestroy(); 并注意到它们的"一刀切"性质往往使它们不适合大多数现实世界的用例,支持上述论点.