C++ 如何避免多次调用std::cout实现逐行递增星号图案打印
C++ 逐行递增星号打印简化实现方案
以下提供3种不同复杂度的实现方式,均可以支持任意行数的打印需求,只需修改对应行数参数即可适配从5行到50行的场景:
方案1:基础双重循环实现
最通用的实现,兼容所有C++标准版本,无需依赖额外库:
#include <iostream> int main() { const int total_lines = 50; // 只需修改这个值即可调整总打印行数 for (int i = 1; i <= total_lines; ++i) { // 内层循环打印当前行的i个星号 for (int j = 0; j < i; ++j) { std::cout << '*'; } std::cout << '\n'; // 用'\n'代替std::endl避免不必要的缓冲区刷新,性能更好 } return 0; }
方案2:利用std::string构造函数简化(推荐普通场景使用)
利用C++标准库string的内置构造逻辑省略内层循环,代码更简洁:
#include <iostream> #include <string> int main() { const int total_lines = 50; for (int i = 1; i <= total_lines; ++i) { // 直接生成i个'*'组成的字符串打印 std::cout << std::string(i, '*') << '\n'; } return 0; }
方案3:C++20 区间函数实现(符合你提到的类似区间函数的需求)
如果你使用支持C++20的编译器,可以用标准库的区间生成函数完全省略手写循环计数逻辑:
#include <iostream> #include <string> #include <ranges> #include <algorithm> int main() { const int total_lines = 50; // 生成1到total_lines的整数区间,遍历每个值打印对应长度的星号 std::ranges::for_each(std::views::iota(1, total_lines + 1), [](int n) { std::cout << std::string(n, '*') << '\n'; }); return 0; }
内容的提问来源于stack exchange,提问作者Judahmane
相关产品推荐
相关产品推荐

