Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以修改c+中的下一个元素(最早的元素)+;队列_C++_Struct_Queue - Fatal编程技术网

C++ 是否可以修改c+中的下一个元素(最早的元素)+;队列

C++ 是否可以修改c+中的下一个元素(最早的元素)+;队列,c++,struct,queue,C++,Struct,Queue,考虑一个packet类型的队列 queue < packet > buffer; 现在,考虑一下: if (buffer[i].Front().inter_dst_id == local_id && buffer[i].Front().phase == true) buffer[i].Front().phase = false; 但在上述情况下,我无法写入“阶段”。有可能吗?提前谢谢 是否可以修改C++队列中的下一个元素(最旧元素)?< /P> 是的,像这

考虑一个packet类型的队列

queue < packet > buffer;

现在,考虑一下:

if (buffer[i].Front().inter_dst_id == local_id && buffer[i].Front().phase == true)
    buffer[i].Front().phase = false;
但在上述情况下,我无法写入“阶段”。有可能吗?提前谢谢

是否可以修改C++队列中的下一个元素(最旧元素)?< /P> 是的,像这样:

buffer.front().phase = false;

更多信息请参见。

@juanchopanza:我无法使上述工作正常进行。似乎无法修改队列的前端元素。相反,我用了德克

deque缓冲区

然后,我将缓冲区[I].front复制到一个临时变量中。我更改了temp变量中的阶段。使用
pop\u front()
删除了缓冲区[i].front。最后,使用
push_front()
使用修改的相位推送温度变量


我是stl的新手,因此花了一些时间。我不确定这是否是最好的方法,但它对我很有效

之前的回答是什么?有什么问题吗?前面的答案是错误的。我对
buffer[I]
应该做什么感到困惑
std::queue
是一个容器适配器,它甚至不公开
operator[](size\u t)
,所以我不确定您想做什么。如果需要随机访问队列中的元素,则不应使用
std::queue
适配器;您应该只使用
std::deque
。如果您只想修改队列前面的元素,只需使用
front()
。我正在建模一个具有4个端口的路由器。缓冲区[i]对应于4个不同端口的i=0,1,2,3,每个端口包含一些数据包。我希望更改队列顶部数据包的“阶段”。我用过德克。我得到的错误是:
错误:从“packet”转换为非标量类型“std::deque::iterator{aka std::_deque_iterator}”请求了
@VindRaider是的。:),抱歉,单词选择错误。对我来说不是这样的。本例中的错误是:error:usingtemporary作为左值[-fppermissive]@VindRaider好的,如果您发布一些(最小的)代码来重现问题,会更容易。我无法使上述操作正常工作。相反,我用了德克
deque buffer
然后,我将buffer[I].front复制到一个临时变量。我改变了温度变量的相位。使用
pop\u front()
删除了缓冲区[i].front。最后,使用“push_back()”推送具有修改相位的temp变量。
buffer.front().phase = false;