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()将新项目放在向量的末尾。为此,您不希望像这样做那样初始化向量(这会在向量上放置五个空队列);只是默认初始化向量:

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

但是还有一个问题是你的向量有 type 的元素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 回答