1. ホーム
  2. c++

[解決済み] C++ グローバル配列の初期化

2022-01-29 14:01:45

質問

皆さん、こんにちは。私は経験豊富なjavaプログラマーで、C++を学んでいるところです。

さて、ちょっと初心者の悩みがあります。私はint型の配列変数xを持っています。

ユーザはメソッドBでxのサイズを入力しますが、私はメソッドAでxを使いたいのです。

void method A()
{
 using int x [] blah blah blah
}

void method B()
{
int n;
cin >>n;
int x [n]; // How can I use this int x in method A without getting error: storage size x is unknown.
// Or the error 'x' was not declared in this scope.
}

EDIT: パラメータ渡しは、私が求めている解決策ではありません。

DOUBLE EDIT: ベクターオプションについては知っていますが、私のプログラムは時間的に厳しいのです。私は、ミリ秒単位でカウントされるアルゴリズムを作成しています。

ちなみに私はその方法を見つけました。

int x [] = {}

method B();
method A () { blah blah use x}
method B () {/*int*/ x [n]}

解決方法は?

もし、実際にベクトルではなく配列が必要で、その配列を実行時に動的にサイズ調整したい場合は、ヒープ上に配列を作成し(ポインタで格納)、終了時に解放する必要があります。

Javaから来た人は、C++にはガベージコレクションがないことを理解する必要があります。 new (ヒープ上に作成した) オブジェクトをデストラクタでクリーンアップするには delete .

class foo
{
    private:
    int *array;

    public:
    foo() { array = NULL; };
    ~foo()
    {
        if (array != NULL)
            delete [] array;
    }

    void createArray()
    {
        array = new int[5];
    }

};

詳細はこちらで。 http://www.cplusplus.com/doc/tutorial/dynamic/