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++; } }
说明
- 新增
<iostream>头文件,确保std::cout能正常工作。 - 把print函数里的
while (beg == end)改成while (beg != end),这才是遍历容器的正确逻辑。 - 输出时添加空格
" "分隔每个数字,并且在两次print之间加换行,让奇数和偶数的输出分开显示,更清晰。 - 简化了main函数里的迭代器声明,直接用容器的
begin()和end()作为参数传递,代码更简洁。
内容的提问来源于stack exchange,提问作者大爱中国
相关产品推荐
相关产品推荐

