开发者

How many character can a STL string class can hold?

I need to work with a series of characters. The number of characters can be upto 1011. In a usual array, it's not possible. What should I use? I wanted to use gets() function to hold the string. But, is this possible for STL containers? If not, then what's the way?

Example: input: AMIRAHID output: A.M.I.R.A.H.I.D

How to make this possible if the number开发者_运维知识库 of characters lessened to 10^10 in 32-bit machine ?

Thank you in advance.


Well, that's roughly 100GByte of data. No usual string class will be able to hold more than fits into your main memory. You might want to look at STXXL, which is an implementation of STL allowing to store part of the data on disk.


If your machine has 1011 == 93GB of memory then it's probably a 64bit machine, so string will work. Otherwise nothing will help you.

Edited answer for the edited question: In that case you don't really need to store the whole string in memory. You can store only small part of it that fits into the memory.

Just read every character from the input, write it to the output and write a dot after it. Repeat it until you get and EOF on the input. To increase performance you can read and write large chunks of the data but such that still can fit into the memory.

Such algorithms are called online algorithms.


It is possible for an array that large to be created. But not on a 32-bit machine. Switching to STL will likely not help, and is unnecessary.


You need to contemplate how much memory that is, and if you have any chance of doing it at all.

1011 is roughly 100 gigabytes, which means you will need a 64-bit system (and compiler) to even be able to address it.

STL's strings support a max of max_size() characters, so the answer can change with the implementation.


A string suffers from the same problem as an array: *it has to fit in memory.

10^11 characters would take up over 4GB. That's hard to fit into memory on a 32-bit machine which has a 4GB memory space. You either need to split up your data into smaller chunks, and only load a bit of it at a time, or switch to 64-bit, in which case both arrays and strings should be able to hold the data (although it may still be preferable to split it up into multiple smaller strings/arrays


The SGI version of STL has a ROPE class (A rope is a big string, get it).

I am not sure it is designed to handle that much data but you can have a look.
http://www.sgi.com/tech/stl/Rope.html


If all you're trying to do is read in some massive file and write to another file the same data with periods interspersed between each character, why bother reading the whole thing into memory at once? Pick some reasonable buffer size and do it in chunks.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜