0

これは、switchステートメントを凝縮する方法に関する以前の質問の続きです。以前に提供された入力を使用しましたが、要素をベクトルに挿入する方法についてエラーが発生しますが、これがC ++でベクトルを挿入した方法だと思いましたか?

std::queue<myStruct > myQueue1, myQueue2, myQueue3, myQueue4, myQueue5

void change(float posx, float posy, int idNumber){  
    myStruct newDir;
    newDir.psX = posx;
    newDir.psY = posy;

    std::vector< std::queue<myStruct> > myVector (5);

    myVector.begin();
    myVector.insert (myQueue1);
    myVector.insert (myQueue2);
    myVector.insert (myQueue3);
    myVector.insert (myQueue4);
    myVector.insert (myQueue5);


    if (idNumber >= 1 && idNumber<= 5){
        myVector[idNumber-1].push (newDir);
        }


}

TIA助けていただければ幸いです。

4

2 に答える 2

4

vector::insert()特定の位置に新しい要素を挿入するためのものです(したがって、位置パラメータが必要です)。おそらくpush_back()、ベクトルの最後に新しいアイテムを配置するものが必要です。これが機能するためには、ベクトルを初期化する必要はありません(これにより、ベクトルに5つの空のキューが配置されます)。ベクトルをデフォルトで初期化します。

std::vector< std::queue<locaRef> > myVector;

ただし、ベクトルにタイプがの要素があるという問題もありますがstd::queue<locaRef>、ベクトルに配置するキューはですstd::queue<MyStruct>。タイプの違いを修正したとしても、ベクターに配置されるのはキューのコピーであることに注意する必要があります。これは、希望するものである場合とそうでない場合があります。コピーが必要ない場合は、ベクターがキューオブジェクトへのある種のポインターまたはスマートポインターを取得するようにすることができます。

于 2012-04-23T23:55:28.480 に答える
0

とにかくキューの数を5にハードコーディングする場合は、の代わりに配列を使用できますvector。一般に、便宜上、構造体に単純なコンストラクターを指定します。

struct My_Struct
{
     My_Struct(float posx, float posy) : posx_(posx), posy_(posy) { }
     float posx_, posy_;
};

std::queue<My_Struct> my_queues[5];

void change(float posx, float posy, int id_number)
{
    if (id_number >= 1 && id_number <= 5)
        my_queues[id_number - 1].push(My_Struct(posx, posy));
    // else throw or assert so you'll see there's a problem...?
}
于 2012-04-24T00:54:15.600 に答える