如何遍历容器前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
相关产品推荐
相关产品推荐

