【发布时间】:2017-02-20 13:15:44
【问题描述】:
对于数据压缩,我需要打开文件(此处为文本文件)并将其所有内容存储在变量中。
使用字符串或字符向量来存储非常大的文本(数百万或更多字符)更好吗?
更好,我的意思是更快地遍历每个字符,也更快地使用count 函数来计算文本中给定字符的出现次数。
大小在这里并不是真正的问题,因为字符串和向量都可以存储大量字符,如果需要,我可以将文本分成几个子文本。
【问题讨论】:
-
实际性能取决于特定的 C++ 实现。在这方面,字符串和向量之间没有实质性区别。两者都是随机访问容器,提供类似的功能。您将花费更多时间试图弄清楚这一点,然后您可能希望通过选择据称最优化的容器来节省。
-
在实践中,很可能根本没有区别。两种类型都提供前向迭代器,它们(通常)实现为指针。唯一的语义差异是,您的代码的读者更有可能期望在
vector的受控序列中嵌入NUL字符。由于您正在处理文本文件,所以这不是问题。 -
你的瓶颈不是内存中的容器,而是文件I/O。您将需要使用一个容器,您可以在构建过程中 调整大小 或设置容量。在读取文件时重新分配内存非常慢。