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

如何遍历容器前10个元素?替换myset.end()实现set前10元素打印

只打印std::set前10个元素的实现方案

你现在需要遍历std::set时只输出前10个元素,不用myset.end()作为终止条件对吧?这里有几种简洁的实现方式,适配不同的C++版本:

方法1:用计数器控制循环次数

这是最直观的方式,初始化一个计数器,每遍历一个元素就递增,到10就停止:

#include <iostream>
#include <set>

int main () {
    std::set<int> myset;
    std::set<int>::iterator it;
    // 插入20个元素
    for (int i=1; i<=20; ++i) myset.insert(i*10);

    std::cout << "myset contains first 10 elements:";
    int count = 0;
    for (it = myset.begin(); it != myset.end() && count < 10; ++it, ++count) {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;
    return 0;
}

这里同时保留it != myset.end()的判断,能避免当set元素不足10个时出现越界问题,鲁棒性更好。

方法2:使用std::next定位终止迭代器

如果你用的是C++11及以上版本,可以用std::next直接定位到第10个元素的位置,把它作为循环的终止条件:

#include <iostream>
#include <set>
#include <iterator> // 需包含此头文件使用std::next

int main () {
    std::set<int> myset;
    // 插入元素
    for (int i=1; i<=20; ++i) myset.insert(i*10);

    std::cout << "myset contains first 10 elements:";
    // 处理边界:如果元素不足10个,就用end()作为终止
    auto end_it = std::next(myset.begin(), std::min(myset.size(), static_cast<size_t>(10)));
    for (auto it = myset.begin(); it != end_it; ++it) {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;
    return 0;
}

这种写法把终止条件提前计算好,循环逻辑更简洁。

方法3:C++11+范围for循环加计数器

如果喜欢现代C++的简洁语法,范围for配合计数器也是不错的选择:

#include <iostream>
#include <set>

int main () {
    std::set<int> myset;
    for (int i=1; i<=20; ++i) myset.insert(i*10);

    std::cout << "myset contains first 10 elements:";
    int count = 0;
    for (const auto& elem : myset) {
        if (count >= 10) break;
        std::cout << elem << ' ';
        ++count;
    }
    std::cout << std::endl;
    return 0;
}

这种写法可读性拉满,非常适合日常开发场景。

内容的提问来源于stack exchange,提问作者muzzi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:18:45