[英]Data Structures using C or C++?
使用基于C ++的类/对象比使用传统C结构管理链接列表,堆栈,树,队列等标准数据结构有什么好处? 如果问题不明确,请告诉我。
首先,在C ++中,您可以使用模板,它允许您创建通用集合并以类型安全的方式使用它们。 即,您可以拥有一个字符串列表,另一个int列表和三个YourClass
对象列表,所有这些都由单个列表实现支持,编译器保证您不能将字符串放入int列表中。
在C中,您只能通过void*
指针实现此目的,并且编译器无法保证类型安全。
一个很大的优点是它为您提供性能保证。 此外,代码更易于维护,因为它是标准化的,任何加入团队的新成员都能够快速理解代码。
C ++ / OO数据结构的优点:
使用操纵结构的方法对数据结构进行自然分组。
处理数据结构的方法/函数的更自然的名称:例如push()
和pop()
而不是一些人工命名空间嵌入函数名称。
编译器检查数据结构的保护。
继承 - 处理任何可迭代的序列。
主要优点是方法(代码)与数据一起。
c风格:
linkedlist_append(linkedlist* list, void* element)
现在比较:
class LinkedList
{
LinkedList* Append(void* element);
}
甚至
LinkedList* Append(T* element);
C ++数据结构由STL提供(无论如何都是OP中的所有数据结构)。 您可以在任何C ++编译器中立即创建一个std :: map。 在C中,你必须自己写。 此外,STL还提供许多保证,如强类型安全,无内存泄漏,并且通常比自制的替代品更快。 此外,在C ++中,您可以编写模板化函数来实际获取任何STL数据结构,例如,迭代它。
基本上,C ++将为您自动完成大量的工作,并保证它的工作和运行良好。 C解决方案没有任何优势。
虽然你可以只使用C添加自定义方法,但这是相当丑陋的,C ++提供了一种更优雅和自然的方式。 在C ++中,您可以使用多态并在结构中添加基类。 在您的示例中,所有数据结构可能都支持add()和find()方法。 因此,您可以编写独立于基础数据结构的代码 - 如果需要,您可以稍后更改实现或甚至更改使用的数据结构。 此外,例如,堆栈可以定义为特殊列表,因此您可以将列表扩展为堆栈(或队列),从而减少代码中的冗余。
此外,C ++已经在标准库中提供了大多数有用的数据结构,这些数据结构编写得很好,基于模板,因此通用,并且在任何地方都是相同的,因此是可移植的。
当我们使用结构时,所有元素都保存在堆栈中,但是当我们使用类时,所有元素都存储在堆中。堆的大小大于stack的大小.Heap是参数类型但堆栈是值类型。所以如果我们有一个它无法通过结构管理的大量数据,我们总是喜欢类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.