繁体   English   中英

使用C或C ++的数据结构?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM