2

我有一个char**我经常需要插入或执行查找的。数组和插入字符串非常繁琐realloc()malloc()

是否有任何标准方法可以添加字符串或在 a 中进行查找char**?我想我正在寻找类似字符串的东西,但使用char**'s 代替。

4

6 回答 6

5

如果您经常插入此结构,则根本不应该使用 a char**;数组不是此类操作的合适数据结构。如果可能的话,考虑一个std::vector<string>或类似的东西。

于 2009-03-25T01:32:22.227 回答
1

听起来您想使用诸如 STL 列表或char* 的Boost Array之类的东西。

请注意,如果您需要从数组中插入或删除元素,则 STL 向量不是可取的。

于 2009-03-25T01:30:36.893 回答
0

目前尚不清楚您要问什么问题。如果你想要一个字符串序列,也许Seq_TDave Hanson 的C 接口和实现中的类型可以解决问题——它是用 C 编写的非常有用的数据结构的集合,它可以在你插入时为你增加和缩小内存并删除项目。

于 2009-03-25T01:30:22.607 回答
0

如果这是普通的 C -

我还没有看到任何标准的方法来做到这一点,但话虽如此,我已经在我的 C 例程中做了很多。实际上,创建一系列函数来对 char* 和 char** 值进行您想要的操作是相当简单的。

对我来说,这只是建立一个(小型)例程库的问题。我从内存管理的例程和我想要的所有 char* 操作开始。然后使用这些来制作插入 char** 等的例程。

对于 C++,您应该考虑重构以使用 std::vector 或其他类似的数据结构。会好很多。

于 2009-03-25T01:33:51.207 回答
0

如果是 C++,你可以使用 STL,但要注意 STL 的跨平台支持是不确定的,这对你来说可能无关紧要。

如果是 C,那么您可能想要创建一个数据结构来保存所有字符串并在该数据结构上创建插入、删除、修改函数。您应该能够为您选择的数据结构找到大量开源代码。

无论哪种方式选择适当的数据结构,您都需要考虑查找和插入模式,您插入的频率如何?你多久“抬头”一次?是通过搜索匹配的字符串来完成查找,还是可以做一些更智能/更快的事情?基本上需要更多信息。

例如,如果字符串都是唯一的并且您处理大量字符串,那么计算字符串的哈希并将它们存储在类似 RB-tree 的东西中是有意义的。如果你从来没有得到超过 10 个字符串,那么这样做可能没有意义,或者应用程序可能是这样的,你可以简单地为字符串分配一个 ID 并将索引用作查找键。

有很多选择。

于 2009-03-25T02:30:46.533 回答
0

我同意(许多!)其他人的观点,他们建议另一种数据结构可能更适合这种情况,但如果您出于某种原因必须使用,通常的启发式方法是char**

  1. 始终保持当前长度和可用长度(例如在 a 中struct)和
  2. 在 ing时总是将缓冲区大小增加两倍(或更多)realloc(这导致分配和应对的摊销 O(n) 时间)。
于 2009-03-25T03:12:16.043 回答