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