You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

print函数无法输出deque中的值,程序执行无结果问题求助

问题分析与修复方案

核心问题点

  • 未包含输入输出头文件:代码中使用了std::cout但没有引入<iostream>,这会导致编译失败或运行时无法正常输出。
  • print函数循环逻辑完全写反:原代码里的循环条件是while (beg == end),这意味着只有当起始迭代器等于结束迭代器时才执行循环——而正常逻辑应该是当起始迭代器还没走到结束迭代器时循环,也就是while (beg != end)。这是导致明明deque有值却没输出的直接原因。
  • 输出无分隔符:直接连续输出数字会导致结果挤在一起,可读性差。

修正后的完整代码

#include <list>
#include <deque>
#include <iostream>  // 新增:引入输入输出头文件
void print(std::deque<int>::iterator beg, std::deque<int>::iterator end);

int main()
{
    std::list<int> lint{1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::list<int>::iterator itor;
    std::deque<int> dint1, dint2;
    itor = lint.begin();
    for (; itor != lint.end(); itor++)
    {
        if (*itor % 2 == 0)
        {
            dint2.push_back(*itor);
        }
        else
            dint1.push_back(*itor);
    }
    
    // 简化写法,直接传递迭代器
    print(dint1.begin(), dint1.end());
    std::cout << std::endl;  // 换行区分奇数和偶数输出
    print(dint2.begin(), dint2.end());
}

void print(std::deque<int>::iterator beg, std::deque<int>::iterator end){
    // 修正循环条件:遍历容器的正确逻辑
    while (beg != end)
    {
        std::cout << *beg << " ";  // 加空格分隔数字
        beg++;
    }
}

说明

  1. 新增<iostream>头文件,确保std::cout能正常工作。
  2. 把print函数里的while (beg == end)改成while (beg != end),这才是遍历容器的正确逻辑。
  3. 输出时添加空格" "分隔每个数字,并且在两次print之间加换行,让奇数和偶数的输出分开显示,更清晰。
  4. 简化了main函数里的迭代器声明,直接用容器的begin()和end()作为参数传递,代码更简洁。

内容的提问来源于stack exchange,提问作者大爱中国

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:27:27