【发布时间】:2013-11-08 15:49:09
【问题描述】:
我在 C++ 中有一个奇怪的问题:
mutex_type list_mutex;
typedef list<char*> RQueue;
RQueue rQueue;
RQueue::reverse_iterator rstart, rend, last;
1 while(true) {
2 LockMutex(list_mutex);
3 rstart = rQueue.rbegin();
4 rend = rQueue.rend();
5 while( (rstart != rend) && (rstart != last) ) {
6 print *rstart;
7 }
8 last = rQueue.rbegin();
9 UnlockMutex(list_mutex);
10 }
-
rQueue是一个队列,我在其中以相反的顺序迭代 -
rQueue可以随时接收消息 - 我添加了迭代器
last以便 避免在第 6 行修改接收消息 -
在第 8 行,我保留了打印消息的位置,并且我想要 仅打印比上一条消息更新的消息。
我的问题:当迭代完成并添加新消息时 队列中,迭代器
last的值变了,变成一样的了 作为迭代器rstart的值,因此新到 消息不在第 6 行打印。
不知道为什么last = rQueue.rbegin()在解锁队列后接收新元素时会修改其值。
谢谢。
【问题讨论】:
-
虽然this question 不是真正的重复,但我的回答回答了你在这里的问题。
-
如果删除三分之二的括号,
while语句的含义并不完全相同。
标签: c++ reverse-iterator