可以用vector
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
具体用法参照下面的例子
// resizing vector
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector;
// set some initial content:
for (int i=1;i<10;i++) myvector.push_back(i);
myvector.resize(5);
myvector.resize(8,100);
myvector.resize(12);
std::cout << "myvector contains:";
for (int i=0;i<myvector.size();i++)
std::cout << ' ' << myvector[i];
std::cout << '\n';
return 0;
}
输出结果:
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0
// vector::operator[]
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector (10); // 10 zero-initialized elements
std::vector<int>::size_type sz = myvector.size();
// assign some values:
for (unsigned i=0; i<sz; i++) myvector[i]=i;
// reverse vector using operator[]:
for (unsigned i=0; i<sz/2; i++)
{
int temp;
temp = myvector[sz-1-i];
myvector[sz-1-i]=myvector[i];
myvector[i]=temp;
}
std::cout << "myvector contains:";
for (unsigned i=0; i<sz; i++)
std::cout << ' ' << myvector[i];
std::cout << '\n';
return 0;
}
输出结果:
myvector contains: 9 8 7 6 5 4 3 2 1 0
只能用指针了。如int型数组,可以这样开辟: int *p = new int[SIZE]; SIZE为读到的大小,C标准是用的malloc()函数。
你还是用c标准吧,先用malloc()开辟一块空间,然后一个一个字符往里面放,放满的话用realloc()重新扩展空间
windows:
int max_len = 40*1024*1024;
int remain=0;PLARGE_INTEGER li;
BOOL sucess =GetFileSizeEx(hFile,&li);
LONGLONG filelen =li.QuadPart;char *p;
remain =filelen % max_len;
if(filelen>
max_len
)// >40M
{
p=new char[
max_len
+4];
memeset(p,0,max_len+4);
while(EndOfFile(hFile)
{
//Load40M(hFile,p,max_len);
//Deal40M(p,max_len);
}
//LoadRemain(hFile,p,remain);
//DealRemain(p,remain);
}
else
{
p=new [filelen+4];
memeset(p,0,filelen+4); //LoadData(hFile,p,filelen);
//DealData(p,filelen);
}
PS :
巨型文件,数组没有这么大,分批处理。
小型文件,可以一次性加载到内存;
如果是文本文件,多开辟4个字节作为字符串结束符
可以把整个文件的数据当作巨型的字符串用。
考虑到UTF8 最长4字节所以结束符用4字节0表示;
上面说的vector也可以,而且是非常推荐的。如果你用的是支持GUN C 标准的编译器的话可以用变量指定数组的大小。
如:
long long sz = 0;
sz = getFileSize();
char buf[sz];
用向量数组