我很抱歉,如果这个问题非常基本,这是我第二次使用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 ++时,我完全是绿色的(我已经阅读了一本书并完成了一些教程)所以如果我做了一些完全错误的事情,请告诉我。如果我不能在运行时和仅在编译时执行此操作,我还可以使用其他方法来获得相同的结果吗?
由于
答案 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);