在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加的, 我也不清楚怎么回事
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
具体用法参照下面的例子
// resizing vector
#include
#include
int main ()
{
std::vector
// 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 << "
";
return 0;
}输出结果:
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0
// vector::operator[]
#include
#include
int main ()
{
std::vector
std::vector
// assign some values:
for (unsigned i=0; i
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 << "
";
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()重新扩展空间
你还是用c标准吧,先用malloc()开辟一块空间,然后一个一个字符往里面放,放满的话用realloc()重新扩展空间
- 3楼网友:轻雾山林
- 2021-11-14 15:52
上面说的vector也可以,而且是非常推荐的。如果你用的是支持GUN C 标准的编译器的话可以用变量指定数组的大小。
如:
long long sz = 0;
sz = getFileSize();
char buf[sz];
如:
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表示;
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表示;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯