我怎样才能轻松使用char **?

时间:2009-03-25 01:26:01

标签: c++ char standard-library

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

我是否可以在char**中添加字符串或执行查找的标准方法?我想我正在寻找类似字符串的东西,而是使用char**代替。

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

听起来你想使用类似STL List或{* 3}} char *的东西。

请注意,如果您需要在数组中插入或删除元素,则不宜使用STL向量。

答案 2 :(得分:0)

目前尚不清楚你要问的是什么问题。如果你想要一个字符串序列,那么Dave Hanson的C Interfaces and Implementations中的Seq_T类型也可以做到这一点 - 它是用C语言编写的非常有用的数据结构的集合,它设法增长和缩小插入和删除项目时的内存。

答案 3 :(得分:0)

如果这是普通的'C -

我没有看到任何标准的方法来做到这一点,但话虽如此,我已经在我的C例程中做了很多。实际上,使用一系列函数来执行char *和char **值所需的操作非常简单。

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

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

答案 4 :(得分:0)

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

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

要么选择适当的数据结构,要么考虑您的查找和插入模式,您插入的频率是多少?你多久“抬头”一次?通过搜索匹配的字符串来完成查找,还是可以更智能/更快速地执行某些操作?基本上需要更多的信息。

例如,如果字符串都是唯一的并且您处理大量字符串,则计算字符串的哈希并将其存储在类似于该哈希上的RB树之类的内容中是有意义的。如果您从未获得超过10个字符串,则执行此操作可能没有意义,或者应用程序可能只是为字符串分配ID并使用索引作为查找键。

有很多选择。

答案 5 :(得分:0)

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

  1. 始终保持当前长度和可用长度(例如在struct)和
  2. realloc时总是将缓冲区大小增加两倍(或更多)(这会导致分配和处理的O(n)时间分摊)。
相关问题