3

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

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

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

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

4

1 回答 1

2

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

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