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

在C++中怎么实现在定义数组时不设定大小,将文件中的数据读入数组,并根据文件数据的大小来给定数组的大小?
最新回答
听一首歌流一夜泪

2024-11-05 20:49:17

可以用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

追问
这是用什么编程软件写的?威慑呢有这么多 干扰,都没耐心看下去了
追答
不是我的软件的问题, 是上传的时候baidu加的, 我也不清楚怎么回事
欧巴会发光

2024-11-05 01:28:14

只能用指针了。如int型数组,可以这样开辟: int *p = new int[SIZE]; SIZE为读到的大小,C标准是用的malloc()函数。
你还是用c标准吧,先用malloc()开辟一块空间,然后一个一个字符往里面放,放满的话用realloc()重新扩展空间
晚街

2024-11-05 04:54:46

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表示;
净雅

2024-11-05 05:03:03

上面说的vector也可以,而且是非常推荐的。如果你用的是支持GUN C 标准的编译器的话可以用变量指定数组的大小。

如:
long long sz = 0;
sz = getFileSize();
char buf[sz];
菇凉我百毒不侵°

2024-11-05 16:03:55

用向量数组