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

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

可以用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加的, 我也不清楚怎么回事

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-08
只能用指针了。如int型数组,可以这样开辟: int *p = new int[SIZE]; SIZE为读到的大小,C标准是用的malloc()函数。
你还是用c标准吧,先用malloc()开辟一块空间,然后一个一个字符往里面放,放满的话用realloc()重新扩展空间
第2个回答  2013-05-08
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表示;本回答被网友采纳
第3个回答  2013-05-08
上面说的vector也可以,而且是非常推荐的。如果你用的是支持GUN C 标准的编译器的话可以用变量指定数组的大小。

如:
long long sz = 0;
sz = getFileSize();
char buf[sz];
第4个回答  2013-05-09
用向量数组

在C++中怎么实现在定义数组时不设定大小,根据文件大小来给定数组...
可以用vector vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。具体用法参照下面的例子 \/\/ resizing...

在C++中的主函数中,如何定义一个数组,而这个数组的大小不确定,大小和...
...\/\/最后别忘了用delete释放存储空间

c++里怎么定义一个不知道大小的数组
这个数组可能很大很大,所以不要说写个绝对大的数,但是这个数组的大小可以由前面的一个需要从键盘输入值的变量决定,如:intten,s,i;cout<<"输入一个十进制数:\\n";cin>>ten;s=log(te...这个数组可能很大很大,所以不要说写个绝对大的数,但是这个数组的大小可以由前面的一个需要从键盘输入值的变量决定,如:int...

C++问题:如何定义一个未知大小的一维数组,数组大小由输入的值决定_百度...
方法一:……int n;cout<<"请输入你想建立的一维数组维数:"<<endl;cin>>n;int *array = new int[n];……delete [] array;方法二:现代c++程序一般用容器vector代替数组。vector<int> vec;添加值(比如1)用vec.pushback(1)

c++定义数组时如果不指定数组大小,直接赋初始值,那么占用的内存是多大...
C++可以操作底层数据,所以可以操作超出数组边界的地址,只不过这样的后果是未定义的。临时变量的话是存放在程序进程的堆栈上的,一般来说超过边界的地址还是在堆栈上,所以往往程序还是可以运行的。只是如果这个地址是其他变量的地址,那么修改了其他变量的值,这个地址的值也就被覆盖了。 至于你最后个问题...

在C++中,如何对一个不确定大小的数组进行赋值?
\/\/vector的用法 include <iostream> include <vector> using namespace std;int main(){ vector<int> n;int x ;while(cin>>x)n.push_back(x);\/\/建议你看一看关于vector的操作,访问vector的方法很简单,可以用数组下标访问,也可以新建一个迭代器。个人认为vector很类似于动态链表。return 0;} ...

在C++中如何在不知道一个数组具体大小的情况下声明一个数组?
第一种, 用宏定义。define N 20 int a[N];这个20是你自己可以改的。第二种,用动态定义 int *p = new Nsizeof(int);开辟了N个int型空间。能给分不

c语言中如何给不确定大小的数组定义并使用?
C语言中没有明确的“动态数组”(也就是不确定大小的数组)这个概念,只能用动态内存分配来实现,我给你一个思路:创建数组——用动态分配分配一个指定大小的内存(数组)销毁数组——释放动态分配内存 访问元素——通过内存指针间接引用 增加元素——再分配一块新内存区域(大小为增加后的大小),把久...

c语言中什么时候数组不必定义大小,直接用[]表示。 麻烦告诉下,谢谢
C\/C++中使用数据都必须要在定义的时候确定大小。直接用[]的情况是在声明数组时就初始化该数组,例子如下:int a[] = {1,2,3,4,5,6,7,8};这种直接使用[]是因为在直接声明赋初值时,初始值确定了数据的大小,如上例数组大小为8.外还有一种是将数组作为参数传给函数,实际那是传的指针,如下...

在C++里想让数组无上限,就是无限大,怎么弄
在数学方面,经常会利用到无限大这个概念,但是编程中,不存在无限大。即不能通过某种标记来表示无限大,或者保存无限大的内容。在C++中,可以通过new的方式动态创建数组。即需要使用多少数据,就创建多大的空间。另外,我们也可以借助标准模板类进行保存,例如vector等。

相似回答