v [C ++中的long long int]

时间:2014-10-18 15:57:06

标签: c++

为什么我不能声明像long long int v [100000000]这样的值?编译时没有错误,但是当我必须输入我的值时,它只会破坏......

我有以下代码:

#include <iostream>
using namespace std;
int main ()
{
    int n, i, poz, ok;
    long long int a, v[10000000], aux;
    cout << "v[0]= "; cin >> v[0];
    cout << "n= "; cin >> n;
    //cout << v[0] << " ";
    for (i=1; i<n; i++)
    {
        v[i]=((v[i-1]%31337)*(31334%31337))%31337;
        //cout << v[i] << " ";
    }
    //cout << endl;
    a=v[n-1];   
    do
    {
        ok=0;
        for (i=0; i<n-1; i++)
            if (v[i]>v[i+1])
            {
                aux=v[i];
                v[i]=v[i+1];
                v[i+1]=aux;
                ok=1;
            }
    }while (ok==1);
//  for (i=0; i<n; i++)
    //{
    //  cout << v[i] << " ";
    //}
    //cout << endl;
    for (i=0; i<n; i++)
        if (v[i]==a)
            poz=i+1;
    cout << poz;
    return 0;
}

我必须输入值:[11863,1661427]。 任何想法我应该怎么做才能输入这些值?

2 个答案:

答案 0 :(得分:2)

C ++标准有一个专门用于“实施数量”的附录,解释为

  

由于计算机是有限的,因此C ++实现不可避免地受限于它们可以成功处理的程序的大小。

您已超出实施对自动存储持续时间变量总大小的限制。 (通常称为“堆栈大小”)。

您可以尝试使用动态分配:

std::vector<long long int> v(10000000);

动态分配也受到约束,但限制通常取决于地址空间最大片段的大小,通常远大于堆栈大小。

Vlad建议的静态存储持续时间也会改变哪个限制适用,但静态存储持续时间的大对象(例如磁盘上的可执行文件为几千兆字节并且需要几分钟才能加载)往往存在严重缺陷。

答案 1 :(得分:0)

此数组在堆栈中分配,其内存通常非常有限。改为使用

static long long v[10000000];

或者最好使用标准容器std::vector<long long>。此外,从代码中可以看出,数组的实际大小取决于用户输入的数字。因此,使用std::vector<long long>

确实会更好

例如

cout << "n= "; cin >> n;
std::vector<long long> v( n );

cout << "n= "; cin >> n;
std::vector<long long> v;
v.reserve( n );