c ++向量数组错误

时间:2013-07-21 13:45:40

标签: c++ arrays vector

int main()
{
    int n, inInt;
    vector <int> list;
    ifstream ifs("1.txt");
    float a;
    ifs >> a;
    std::vector<int> result;
    int temp;

    while(! ifs.eof())
    {
        ifs >> temp;
        result.push_back(temp);
    }

    int b;
    b = result.size();
    float array[b+1];
    int i;
    array[0] = a;

    for(i = 1;i < b+1;i++) {
        array[i] = (array[i-1] + result[i]-2*array[i-1] * result[i]/a); 
    }
    cout << array[b];

    system("pause");
    return 0;}

基本上在我的代码中,我构建了一个向量并构建了一个数组,并尝试使用数组中向量的数据。但是,当我对代码进行文本处理时,它给了我一个不正确的数字。

2 个答案:

答案 0 :(得分:2)

temp不是数组,temp是一个int。你试图在int上使用operator[]你不能这样做。此外,VLA(可变长度阵列)是GCC扩展,因此不是标准的。我建议你替换这一行:

float array[b+1];

使用:

std::vector<float> array(b+1);

答案 1 :(得分:0)

我至少看到两个问题。首先,your input loop is incorrect并在result中插入无效条目。您可以使用以下输入循环来解决此问题:

while (ifs >> temp)
{
    result.push_back(temp);
}

其次,向量result包含b元素,因此有效索引为[0..b-1]。您的循环结束条件i < b+1将读取result结束后的一个元素。我认为你可以通过这样做来解决这个问题:

for(i = 0; i < b; i++)
{
    array[i+1] = (array[i] + result[i]-2*array[i] * result[i]/a);
}

当我进行这些更改并使用3 2 2进行输入时,输出为1.66667