2012-05-11 5 views
1

この問題は非常に基本的ですが、これは私の2度目のC++であり、私は作ったが、何らかの行動を理解するのが難しい。データのリストがあり、同じサイズの別のリストを作成したいのですが、値はデフォルトで0です(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++に来るとき、私は(完全に緑のよ、私は本を読んだことがありますいくつかのチュートリアルを行ったので)私が何か完全に間違っていると私に知らせてください。私はこれを実行時にコンパイル時にのみ行うことはできませんが、同じ結果を得るために使用できる他のものがありますか?同じのベクトルを作成し

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

おかげで動的サイズの配列を持っているので、これは違法ではありません++

+0

これはとそれを作成するためにstd::vector<short> list1(data.size());を宣言することができ

std::fill(list.begin(), list.end(), 0);どのように見えるか 'のstd ::ベクトルであります<> 'のためのものです - これは' data'のために使用しています_already_です。単に 'list1'のために使用するだけです。 – ildjarn

+0

@ildjarn私はベクトルが可変サイズのリストのためだと思いましたか?固定長のリストを作成する場合はどうすればよいですか? – Lostsoul

+2

'short list1 [data.size()]'は可変サイズリストでの試行ではありませんか? – ildjarn

答えて

5

C:

short list1 [data.size()]; 

いますが、ベクターを使用することができますが長さはdata、ゼロでいっぱいです。

2

実行時にサイズが決定される配列が必要な場合は、配列を割り当てる必要があります。

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

あなたは一般的に可能な限り裸のポインタを避けたいので、クリーンなソリューションを提案とstd ::ベクトルを使用しようとjuanchopanzaものです。

2

C++ベクトルのArrays.fill(list, 0);の同等のあなたは、単にゼロ初期化された値または特定の値​​

関連する問題