std::deque pop_front()未移除元素:基数排序实现问题求助
问题原因与解决方案
核心问题
你在遍历桶集合时使用了值传递,导致操作的是原队列的临时副本,而非队列本身。
详细解释
看这段遍历桶的代码:
for (std::deque<Integer> bucket : buckets){
这里的bucket是buckets中每个std::deque的拷贝副本。当你在循环内调用bucket.pop_front()时,只会修改这个临时副本,buckets里的原始队列完全不受影响——这就是GDB显示原队列元素始终未被移除的原因,你根本没对原队列执行任何修改操作。
修复方案
将循环改为引用传递,让bucket直接指向buckets中的原始队列:
for (std::deque<Integer>& bucket : buckets){
只需在bucket前添加&,后续对bucket的所有操作(包括pop_front()、empty())都会直接作用于原队列,元素就能正常被移除,无需每次循环重新分配队列,额外开销也会消失。
额外提示
将桶中元素放回m_integers时,要确保m_integers的容量足够容纳所有元素,避免出现越界问题。
内容的提问来源于stack exchange,提问作者interloper.init
相关产品推荐
相关产品推荐

