用C ++实现复杂的数据结构

时间:2013-03-24 15:19:32

标签: c++

当您必须在C ++中实现复杂的数据结构时,您采用的解决方案是什么?我的意思是不同类型的对象应该被其他对象引用,同时引用其他对象。它与可用的标准库容器完全不同。

您是否尝试使您的代码非常C ++并使用通用编程(容器样式模板)?恕我直言,它似乎很难实现和不方便,它可能使代码更难理解或使用。此外,你实现了任何类型的迭代器吗?

或者,或许,另一方面,你最终得到“C风格代码”?我的意思是,在每个类中,您实现一些指针作为引用其他对象的成员变量,以便构建合适的数据结构。

根据您的经验,这两种方法的优点和缺点是什么?还有其他解决办法吗?

1 个答案:

答案 0 :(得分:2)

在C ++中编写复杂数据结构时,我遵循了几条准则:

  1. 避免原始指针;使用智能指针。
  2. 如果您的数据结构是循环的还是非循环的,请尽早弄清楚。如果数据结构中存在循环,则无法在不创建泄漏的情况下在任何地方使用share_ptr。在循环结构中的某个点上,您希望使用weak_ptr中断循环,以便可以释放对象。
  3. 如果我的对象持有其他对象,并且我希望它是一个容器,我在需要它时实现适当的迭代器,而不是在之前一秒。当我想在容器上使用其中一个STL算法时,我通常需要迭代器支持。当然,我可以实现与我自己使用的STL(在命名或语义方面)不匹配的迭代器,但后来我添加了另一种在我的代码中执行操作的方法。我尽量避免这种情况。
  4. 如果我的班级打算使用不同的类型,那么我会使用模板来表达它。有很多方法可以用C语言(使用memcpy等)来实现这一点,但是你最终得到的代码对C编码器来说更容易理解,你将失去C ++的大部分好处(类型安全,赋值运算符等) )。