永发信息网

在C++中怎么实现在定义数组时不设定大小,根据文件大小来给定数组大小

答案:5  悬赏:0  手机版
解决时间 2021-11-15 13:44
在C++中怎么实现在定义数组时不设定大小,根据文件大小来给定数组大小
最佳答案
可以用vector
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。


具体用法参照下面的例子
// resizing vector
#include
#include
int main ()
{
  std::vector 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    std::cout << " " << myvector[i];
  std::cout << "
";
  return 0;
}输出结果:
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0


// vector::operator[]
#include
#include
int main ()
{
  std::vector myvector (10);   // 10 zero-initialized elements
  std::vector::size_type sz = myvector.size();
  // assign some values:
  for (unsigned i=0; i  // reverse vector using operator[]:
  for (unsigned i=0; 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    std::cout << " " << myvector[i];
  std::cout << "
";
  return 0;
}输出结果:
myvector contains: 9 8 7 6 5 4 3 2 1 0
追问这是用什么编程软件写的?威慑呢有这么多 干扰,都没耐心看下去了追答不是我的软件的问题, 是上传的时候baidu加的, 我也不清楚怎么回事
全部回答
用向量数组
只能用指针了。如int型数组,可以这样开辟: int *p = new int[SIZE]; SIZE为读到的大小,C标准是用的malloc()函数。
你还是用c标准吧,先用malloc()开辟一块空间,然后一个一个字符往里面放,放满的话用realloc()重新扩展空间
上面说的vector也可以,而且是非常推荐的。如果你用的是支持GUN C 标准的编译器的话可以用变量指定数组的大小。

如:
long long sz = 0;
sz = getFileSize();
char buf[sz];
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表示;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
(333+667)/【6*(4/7-4/9)】
如何用植物杀虫给蔬菜
几月去江油爱情谷最好
春风400跟永源350哪个好
属虎女阴历7月和属狗男阴历9月婚姻如何
怎么让新打开的网页显示在下面?
按键精灵找到图后,该图一直保持5分钟任然存
GT机油多少公里换一次最好?
大众宝来空踩油门没事吧
闪闪红星照我心征文
想学塑料配色???去哪里学呢?。。需要学多
谁是职场上最可怕的人
如何有效挖掘人力资源潜力
x:y等于0.2:0.3,X:Z=5:6求X:Y:Z
铁矿哪里多?
推荐资讯
哎~~~~~~~
柿子能不能冷冻吃
有没有好看的情侣头像双人
请问通俗唱法,喉头需要稳定吗,需要降低喉位
粟氏茶业地址有知道的么?有点事想过去!
1顿0.35厚的矽钢片可以冲多少只32*11.5*60转
龙凤防盗门窗地址好找么,我有些事要过去,
2011年信鸽足环号查询2011 22 342887
对于晚清的大臣曾国藩李鸿章张之洞左宗棠,怎
佛教中的忍辱,是不是就是说,打不还手,骂不还
问你一个问题
如何做玉米窝窝头会松软些?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?