永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-11-15 13:44
  • 提问者网友:不要迷恋哥
  • 2021-11-14 12:56
在C++中怎么实现在定义数组时不设定大小,根据文件大小来给定数组大小
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-11-14 14:20
可以用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加的, 我也不清楚怎么回事
全部回答
  • 1楼网友:几近狂妄
  • 2021-11-14 17:39
用向量数组
  • 2楼网友:等灯
  • 2021-11-14 17:06
只能用指针了。如int型数组,可以这样开辟: int *p = new int[SIZE]; SIZE为读到的大小,C标准是用的malloc()函数。
你还是用c标准吧,先用malloc()开辟一块空间,然后一个一个字符往里面放,放满的话用realloc()重新扩展空间
  • 3楼网友:轻雾山林
  • 2021-11-14 15:52
上面说的vector也可以,而且是非常推荐的。如果你用的是支持GUN C 标准的编译器的话可以用变量指定数组的大小。

如:
long long sz = 0;
sz = getFileSize();
char buf[sz];
  • 4楼网友:迷人又混蛋
  • 2021-11-14 14:41
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表示;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯