插入字符串的效率

时间:2012-01-09 07:36:32

标签: c++ string performance

我正在尝试为非常大的整数编写这个自定义加法类,大于长整数。我正在研究的一种方法是将整数保持为字符串,然后将字符转换为其int组件,然后添加每个“列”。我正在考虑的另一种方法是将字符串拆分成多个字符串,每个字符串都是long long的大小,然后使用字符串流将其强制转换为long long,然后重新组合。

无论我遇到过这样一个事实,即加法最容易反过来允许携带数字。在这种情况下,我想知道字符串的插入方法的效率。似乎因为字符串是一个字符数组,所有字符都必须移过一个字符。所以它会有所不同,但效率似乎是O(n),其中n是字符串中字符的数量。

这是正确的,还是仅仅是一种天真的解释?

编辑:我现在已经回答了我的问题,但我想知道一个更有效的相关主题,将一个字符串插入一个流然后提取到一个int。或者做10 ^ n * char1 + 10 ^ n-1 * char2 ...等?

2 个答案:

答案 0 :(得分:5)

据我所知,你是对的。 String的C ++实现将在O(n)时间内执行插入。它将字符串视为字符数组。

对于数字实现,为什么不将数字存储为整数数组并仅转换为字符串以进行输出?

答案 1 :(得分:2)

std::string的所有实际实现可能都是正确的。在这种情况下,您可能想要反向存储数字(尽管在其他方面可能会很笨拙),或者使用像std::deque<char>之类的东西。更好的是,使用std::deque<unsigned long long>,这将减少所涉及的操作数量。

当然,对于实际使用,您通常希望使用现有的库而不是自己的库。