2016-12-02 12 views
-2

まず、C++を初めて使い、MatLABでの作業に非常に慣れています。私のコードでは、シーズン中のC++ユーザーが私を撃ってもらいたいと思うかもしれませんが、次のようになります。C++でifループの範囲外にあるベクトルにアクセスする

EDIT:自分のコードスニペットを大きく編集しました。以下は、私が達成しようとしているもののクリーンアップされた、一般化された例です。私はこれを行う場合は

int main() 
{ 


int t = 0; 
vector<int> Pad_Ref_Vec; //initialize vector. Required size unknown 


    for (int n = 0; n <= 10; n++) 
    { 

      if (t == 0) 
      { 
       vector<int> Pad_Ref_Vec(100); //at this point in the code, i know the size i need this vector to be 

       for (int i = 0; i < 100; i++) 
       { 
        Pad_Ref_Vec[i] = i;   
       } 

      } 
      else 
      { 

      //do some operation using the values of Pad_Ref_Vec created in the above 
      //if statement 

      } 

    t++; 

    } 

    return 0; 
} 

、ベクトルPad_Ref_Vecは読みません[0 1 2 3 4 5 ... ...] if文の後に、しかし、最初の初期化の前にした後、(その前のフォームに戻りますforループ)サイズ0のベクトルだけです

私はそれがとても簡単なことがそのような面倒になっていると信じるのは難しいと思っています。建設的なヒントを事前に感謝します。

+0

ヒント:ベクターをコピーし、コピーから再初期化することができます。 –

+0

要するに、すべての後続のループ(t> 0の場合)で、ifループ(t == 0の場合)で作成するベクトルの要素を使用したいと思います。私は、フィーチャの動きを追跡するために、最初のt == 0フレームに対してすべてのt> 0フレームの強度プロファイル(画像にわたるラインの)を自動的に相関させようとしています。私は私の研究室でこれを使用している非常によく開発されたMatlabスクリプトを持っていますが、私はopenCVを使ったリアルタイムアプリケーション用に書き直しています。 –

+0

あなたはチャット・マンです。関連性のある重要な事柄に集中する。 –

答えて

1

ここにはいくつかのものがあります。

最も重要なことは、宣言したものの生涯です。 {}内にベクタを宣言すると、そのベクタはその外では使用できなくなります。だから、if (t == 0)の外にあなたのベクトルを使いたい場合は、それをifの外で宣言しなければなりません。そうしないと、それをアクセスしたいときにもう存在しません。

ifの外側で宣言し、ifで必要なときに初期化することができます。あなたが本当にサイズを知らずに要素を追加したい場合や、使用 push_back

Vectorクラスは、このような状況であなたを助けるために便利な機能の多くを、持っている: (cplusplus.com以下のコメントから変更)http://en.cppreference.com/w/cpp/container/vector

+0

ありがとうございます。私はベクトルクラスを読んできました。私は何か基本的なものが欠けていることを知っif(t == 0)ループの前に宣言すると、if(t == 0)ループの内部に構築されます。ifループが終了した後でも使用できますか?ベクトルの宣言と初期化の違いは何ですか?自動的にゼロに初期化すると宣言すると、次のループ中にゼロになることになります。 –

+0

[cppreference](http://en.cppreference.com/w/cpp/container/vector/vector)をC++リファレンスとして使用することをお勧めします。それはcplusplus.comより信頼性があります。 –

+1

@OliverKress第1の 'if'は_loop_を構成しません。 –

関連する問題