向量和队列C ++

时间:2012-04-23 23:50:41

标签: c++ vector

这是关于如何压缩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任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

vector::insert()用于在特定位置插入新元素(因此需要位置参数)。您可能只想要push_back()将新项目放在向量的末尾。为了实现这一点,你不希望像你一样初始化你的向量(它在向量上放置了五个空队列);只需默认初始化矢量:

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

但是还有一个问题,即你的vector有类型为std::queue<locaRef>的元素,但是你在向量上放置的队列是std::queue<MyStruct>。即使您修复了类型的差异,您也需要记住,将要放到向量上的是队列的副本,这可能是您想要的,也可能不是。如果您不想复制,您可能希望向量采用某种指针或智能指针指向队列对象。

答案 1 :(得分: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...?
}