使用C或C+的数据结构+;? 一方面,C++中可以使用模板,允许您创建泛型集合并以类型安全的方式使用它们。也就是说,您可以有一个字符串列表、另一个int列表和三分之一的YourClass对象,所有这些都由一个列表实现支持,并且编译器保证您不能将字符串放入int列表中

使用C或C+的数据结构+;? 一方面,C++中可以使用模板,允许您创建泛型集合并以类型安全的方式使用它们。也就是说,您可以有一个字符串列表、另一个int列表和三分之一的YourClass对象,所有这些都由一个列表实现支持,并且编译器保证您不能将字符串放入int列表中,c++,C++,在C语言中,您只能通过void*指针来实现这一点,并且编译器不会保证类型安全。一个最大的优点是它为您提供了性能保证。此外,代码更易于维护,因为它是标准化的,任何加入团队的新成员都能够快速理解代码。C++/OO数据结构的优点: 使用操纵结构的方法对数据结构进行自然分组 处理数据结构的方法/函数的更自然的名称:例如push()和pop()而不是一些人工的名称空间嵌入函数名称 编译器检查了数据结构的保护 继承-处理任何可编辑的序列。主要的优点是方法(代码)与数据在一起 c风格: linkedlist_

在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中的所有数据结构)。你可以让自己成为一个STD::在任何C++编译器中立即映射。在C语言中,你必须自己写。此外,STL提供了许多保证,如强类型安全性、无内存泄漏,并且通常比国产替代品更快。此外,在C++中,可以编写模板化函数以几乎任何STL数据结构,并说,重复它。
基本上,C++会自动为你提供大量的工作,并保证它工作正常。C解决方案没有任何优势。

< P>虽然你可以使用C来添加自定义方法,但是这相当丑陋,C++提供了一种更优雅自然的方式。 在C++中,可以使用多态性并将基类添加到结构中。在您的示例中,所有数据结构都可能支持add()和find()方法。因此,您可以编写独立于底层数据结构的代码——如果需要,您可以在以后更改实现,甚至更改使用的数据结构。 此外,例如,堆栈可以定义为特殊列表,因此您可以将列表扩展为堆栈(或队列),从而减少代码中的冗余


也有C++在标准库中已经提供了最有用的数据结构,它是编写好的,基于模板的通用的,并且到处都是相同的,因此可移植。

当我们使用结构时,所有元素都保存在堆栈中,但当我们使用类时,所有元素都存储在堆中。堆的大小大于堆栈的大小。堆是引用类型,但堆栈是值类型。因此,如果我们有大量数据,它无法通过结构进行管理,我们总是喜欢类。

这取决于数据使用情况。您能进一步解释一下吗?您似乎在问为什么要在遗留C结构上使用类?是的,你的问题不清楚。虽然不是类型安全的,你可以通过C++来获得所有的优点,即C++模板必须使用一个空指针来提供(减去硬的东西)。性能也会受到影响。考虑到<>代码> STD::DeQue/Cuff>可以存储它的成员,大多数是连续的,但是一个<代码> Value*>基于代码>的解决方案将不会。当然,你也可以用C语言实现类似的东西——通常需要更多的努力、更多的代码和更糟糕的结果。STL实现已经经过十多年的测试和微调。您可以将元素(例如使用
memcpy
)复制到连续缓冲区中,以在C中获得相同的结果。@ardsrk:您假设编写这些C应用程序的人实际上有选择权。高质量C++编译器对他们来说是可用的,他们有C++的技能,等等。这是一个荒谬的论点。如果你不能说出为什么C比C++快,不要试图说“是的,但是很多高性能的应用程序都是用C编写的,所以它必须是最快的,对吧?”当面对事实论证时为什么模板解决方案比空洞快,那么你将需要事实论证,如果你不同意的话。