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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:09:03