我需要处理一系列角色。字符数可以达到10 11 。 在通常的阵列中,这是不可能的。我该怎么用? 我想使用gets()函数来保存字符串。但是,这可能是STL容器吗? 如果没有,那会是什么方式?
实施例: 输入: AMIRAHID 输出:A.M.I.R.A.H.I.D
如果在32位机器中字符数减少到10 ^ 10,如何才能实现这一目标?
提前谢谢。
答案 0 :(得分:6)
嗯,这大约是100GB的数据。没有通常的字符串类能够容纳更多适合你的主存储器。您可能希望查看STXXL,它是STL的一种实现,允许将部分数据存储在磁盘上。
答案 1 :(得分:2)
对于要创建大的数组, 是可能的。但不是在32位机器上。切换到STL可能没有帮助,也没必要。
答案 2 :(得分:2)
你需要考虑有多少记忆,如果你有机会这样做的话。
10 11 大约是100千兆字节,这意味着你需要一个64位系统(和编译器)甚至能够解决它。
STL的字符串最多支持max_size()
个字符,因此答案可能会因实现而改变。
答案 3 :(得分:2)
如果您的机器有10个 11 == 93GB内存,那么它可能是64位机器,因此string
可以正常工作。否则没有什么能帮到你。
编辑过的问题的编辑答案:在这种情况下,您并不需要将整个字符串存储在内存中。您只能存储适合内存的一小部分。
只需从输入中读取每个字符,将其写入输出并在其后写一个点。重复它,直到你得到输入EOF。为了提高性能,您可以读取和写入大块数据,但仍然可以放入内存中。
此类算法称为在线算法。
答案 4 :(得分:1)
字符串遇到与数组相同的问题:* 它必须适合内存。
10 ^ 11个字符占用4GB以上。在具有4GB内存空间的32位机器上很难适应内存。您需要将数据拆分为较小的块,并且一次只加载一点,或者切换到64位,在这种情况下,两个数组和字符串应该能够保存数据(尽管最好将它分成多个较小的字符串/数组
答案 5 :(得分:1)
STL的SGI版本有一个ROPE类(绳索是一个大字符串,得到它)。
我不确定它是为处理那么多数据而设计的,但你可以看看 http://www.sgi.com/tech/stl/Rope.html
答案 6 :(得分:0)
如果你想要做的只是在一些大文件中读取并写入另一个文件,每个字符之间插入相同的数据,为什么还要一次性地将整个内容读入内存?选择一些合理的缓冲区大小并以块的形式进行。