C++ C++;-输入流的大小

C++ C++;-输入流的大小,c++,C++,我正在解决一个问题,其中输入流包含一组整数Ai(0≤ 艾岛≤ 10^(18)). 数字由任意数量的空格和换行符分隔。输入流的大小不超过256 KB 我的代码如下:- #include<math.h> #include<iostream> using namespace std; int main(void) { long int index,i; cin>>index; int *arr=new int[index]; if(s

我正在解决一个问题,其中输入流包含一组整数Ai(0≤ 艾岛≤ 10^(18)). 数字由任意数量的空格和换行符分隔。输入流的大小不超过256 KB

我的代码如下:-

#include<math.h>
#include<iostream>
using namespace std;
int main(void)
{
    long int index,i;
    cin>>index;
    int *arr=new int[index];
    if(sizeof(*arr)<262144)    // 262144 = 256*1024 bytes which I think might be the size of the array                                    
    {
        for(i=0;i<index;i++)
            cin>>*(arr+i);
        for(i=index-1;i>=0;i--)
            cout<<sqrt(*(arr+i))<<endl;
    }
    else
        return -1;
    return 0;
}
#包括
#包括
使用名称空间std;
内部主(空)
{
长整数指数,i;
cin>>指数;
int*arr=新的int[索引];
若(尺寸(*arr)*(arr+i);
对于(i=index-1;i>=0;i--)

cout输入流的大小是输入流中的字节数。这部分代码:

int *arr=new int[index];
if(sizeof(*arr)<262144) 

关于输入流大小的提示建议您可以使用固定大小的基于数组的堆栈。

以下是读取输入流全部内容的方式:

int n;
while (cin >> n) // this test will fail when we reach the end of the stream
{
    // do something with n
}
工作原理:

当到达输入流的末尾时,操作
cin>>n
将失败。这将使
cin
进入错误状态。表达式
cin>>n
返回的值为
cin
,当
cin
时(或任何其他
istream
对象)在布尔上下文中进行测试,如果处于良好状态,则其计算结果为true,如果处于错误状态,则其计算结果为false。因此,上述循环本质上意味着保持从
cin
读取,直到
cin
处于错误状态,这是在输入流耗尽时发生的

因此,您不需要从一开始就知道流中有多少个数字,只需一直读到失败。您需要的是一个数据结构,它可以动态扩展,以容纳您可能收到的所有数字,就像标准库中的任何容器一样。
std::stack
似乎很适合这一要求,但
std::vector
std::deque
std::list
也可以使用

如果不想使用标准库容器,可以使用数组并跟踪其中有多少有效值。那么如何确定数组的最大大小?可以使用输入流的给定大小作为线索。256 KB表示262144个字符。每个整数(第一个除外)必须至少占用2个字符,1代表一个数字,1代表将其与前一个整数分隔的空格。因此,流最多可以包含
262144/2
整数


另外,请注意,输入的范围表示您需要64位或更大的整数。在当今的大多数系统上,
int
不满足此要求。
long
满足此要求。或者您可以包括
并使用
int64\u t

您不需要数组来完成此操作。只需读取和处理即可。它假定我想你使用数据结构。但是我不需要知道流中有多少个数字和哪些数字吗?如果是的话,那么我应该如何使用标准I/O流来做到这一点?我认为“输入流的整个大小”是一个骗局。这与问题无关“输入流的大小”没有任何意义。输入流可以是infi很长。这与你的问题无关。
int n;
while (cin >> n) // this test will fail when we reach the end of the stream
{
    // do something with n
}