v[long long int] in C++

v[long long int] in C++

本文关键字:long in C++ int      更新时间:2023-10-16

为什么我不能声明像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;
}

我必须输入这些值:[118631661427]。有什么想法吗?我应该怎么输入这些值?

C++标准有一个专门用于"实现量"的附录,解释为

由于计算机是有限的,C++实现不可避免地会受到它们能够成功处理的程序大小的限制。

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

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

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

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

Vlad建议的静态存储持续时间也会改变适用的限制,但静态存储持续期的大型对象往往存在严重缺陷(例如磁盘上的可执行文件有几GB,加载需要几分钟时间)。

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

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 );