当我使用变量创建大小时,尝试使用值初始化列表但不起作用

时间:2012-05-11 16:50:28

标签: c++

我很抱歉,如果这个问题非常基本,这是我第二次使用c ++而我正在尝试移植一些我编写的Java代码但是我无法理解某些行为。我有一个数据列表,并希望创建另一个相同大小的列表,但值默认为零(在Java中我创建后使用Arrays.fill(list, 0);)。当我尝试用C ++做类似的事情时,我得到variable-sized object 'list1' may not be initialized

以下是更好示例的代码:

#include <iostream>
#include <boost/assign/std/vector.hpp> // for 'operator+=()'

using namespace std;
using namespace boost::assign;

int main()
{
    cout << "Hello World!" << endl;
    vector<short> data;
    data += -40, -30,-10, 20, 50;

    //int coeff [data.size()];
    cout << "data array size is " << data.size() << endl;
    short list1 [data.size()] = {0}; //does not work
    for (int i =0; i<data.size(); i++) {
        cout << "data is " << list1[i] << endl;
    }

    cout << "********** try 2 **************" << endl;
    //this works if I use a actual number to create the list but I want to declare it at runtime
    short list2 [5] = {0};
    for (int ii=0;ii<5;ii++) {
        cout << "data is " << list2[ii] << endl;
    }


    return 0;
}

就像我提到的那样,当我谈到C ++时,我完全是绿色的(我已经阅读了一本书并完成了一些教程)所以如果我做了一些完全错误的事情,请告诉我。如果我不能在运行时和仅在编译时执行此操作,我还可以使用其他方法来获得相同的结果吗?

由于

3 个答案:

答案 0 :(得分:5)

c ++没有动态大小的数组,所以这是非法的:

short list1 [data.size()];

但您可以使用矢量:

std::vector<short> list1(data.size(),0); 

创建一个与data长度相同的向量,充满零。

答案 1 :(得分:2)

如果你想要一个在运行时确定其大小的数组,你将不得不分配它。

short * list1 = new short[data.size()];
//do stuff
delete [] list1; //we don't want to leak

您通常希望尽可能避免使用裸指针,因此更干净的解决方案是juanchopanza建议并尝试使用std :: vector。

答案 2 :(得分:2)

C ++向量的等效Arrays.fill(list, 0);看起来像std::fill(list.begin(), list.end(), 0);

您也可以简单地声明std::vector<short> list1(data.size());创建零初始值为零或具有特定值std::vector<short> list1(data.size(), 0);