news 2026/6/20 13:58:47

C++迭代器与范围编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++迭代器与范围编程

C++迭代器与范围编程

迭代器是STL中连接容器和算法的桥梁。C++20引入的范围库提供了更简洁的遍历方式,结合视图可以高效处理数据序列。

迭代器类别决定其能力:输入、输出、前向、双向和随机访问。

#include
#include
#include
#include
#include
#include

void iterator_categories() {
std::vector vec = {1, 2, 3, 4, 5};

auto it = vec.begin();
std::cout << "Random access: " << it[2] << "\n";
std::cout << "Distance: " << (vec.end() - vec.begin()) << "\n";

std::list lst = {1, 2, 3};
auto lit = lst.begin();
std::advance(lit, 2);
std::cout << "List forward/bidirectional: " << *lit << "\n";
}

C++20的范围库。

void ranges_basics() {
std::vector data = {5, 2, 8, 1, 9, 3, 7, 4, 6};

std::ranges::sort(data);
std::cout << "Sorted: ";
for (int v : data) std::cout << v << " ";
std::cout << "\n";

auto it = std::ranges::find(data, 5);
if (it != data.end()) {
std::cout << "Found 5 at: " << (it - data.begin()) << "\n";
}
}

范围视图提供惰性计算。

void range_views() {
std::vector data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

auto even = data | std::views::filter([](int n) { return n % 2 == 0; })
| std::views::transform([](int n) { return n * n; });

std::cout << "Even squares: ";
for (int v : even) std::cout << v << " ";
std::cout << "\n";
}

视图的组合使用。

void view_composition() {
std::vector data = {5, 3, 1, 4, 2, 6, 8, 7};

auto result = data
| std::views::filter([](int n) { return n > 3; })
| std::views::transform([](int n) { return n * 2; })
| std::views::take(3);

std::cout << "First 3 doubled values > 3: ";
for (int v : result) std::cout << v << " ";
std::cout << "\n";
}

std::span轻量视图。

#include

void span_example(std::span values) {
std::cout << "Span size: " << values.size() << " [";
for (size_t i = 0; i < values.size(); ++i) {
if (i > 0) std::cout << ", ";
std::cout << values[i];
}
std::cout << "]\n";
}

void span_demo() {
int arr[] = {1, 2, 3, 4, 5};
span_example(arr);

std::vector vec = {10, 20, 30};
span_example(vec);

auto first3 = std::span(arr).first(3);
span_example(first3);
}

生成器视图。

void generate_view() {
auto values = std::views::iota(1, 10)
| std::views::transform([](int n) { return n * n; });

std::cout << "Squares 1-9: ";
for (int v : values) std::cout << v << " ";
std::cout << "\n";

auto even_iota = std::views::iota(0)
| std::views::filter([](int n) { return n % 2 == 0; })
| std::views::take(10);

std::cout << "First 10 even: ";
for (int v : even_iota) std::cout << v << " ";
std::cout << "\n";
}

反向和分割视图。

void split_join_view() {
std::string text = "apple,banana,orange,grape";

auto parts = text | std::views::split(',');
std::cout << "Split: ";
for (auto part : parts) {
std::cout << std::string_view(part) << " ";
}
std::cout << "\n";

std::vector data = {1, 2, 3, 4, 5};
auto reversed = data | std::views::reverse;
std::cout << "Reversed: ";
for (int v : reversed) std::cout << v << " ";
std::cout << "\n";
}

范围与算法结合。

void ranges_algorithms() {
std::vector data = {5, 2, 8, 1, 9, 3};

std::ranges::sort(data);
std::cout << "Sorted: ";
std::ranges::copy(data, std::ostream_iterator(std::cout, " "));
std::cout << "\n";

int min = std::ranges::min(data);
int max = std::ranges::max(data);
std::cout << "Min: " << min << ", Max: " << max << "\n";

auto sum = std::ranges::fold_left(data, 0, std::plus());
std::cout << "Sum: " << sum << "\n";
}

范围提供更简洁、更安全的编程方式,是C++20的重要特性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 13:37:55

嵌入式GUI开发实战:emWin进度条、二维码与单选按钮控件详解

1. 项目概述与控件开发的价值在嵌入式图形用户界面开发这个领域里&#xff0c;控件就像是建筑工地上的预制件。你不需要从零开始烧砖、和水泥、砌墙&#xff0c;而是直接使用已经设计好、测试过的门窗、楼梯和墙体模块&#xff0c;这能极大地加快你的“盖楼”速度&#xff0c;并…

作者头像 李华
网站建设 2026/6/20 13:34:21

思源宋体CN终极完整指南:7种字重免费开源字体高效使用方案

思源宋体CN终极完整指南&#xff1a;7种字重免费开源字体高效使用方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 想要在项目中免费使用专业级中文字体吗&#xff1f;Source Han S…

作者头像 李华
网站建设 2026/6/20 13:32:07

10分钟精通暗黑破坏神2存档修改器:Diablo Edit2终极实战指南

10分钟精通暗黑破坏神2存档修改器&#xff1a;Diablo Edit2终极实战指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的暗黑破坏神2存档修改器&#xff0c;支持从经…

作者头像 李华
网站建设 2026/6/20 13:28:58

终极游戏分屏指南:让任何PC游戏都能本地多人对战

终极游戏分屏指南&#xff1a;让任何PC游戏都能本地多人对战 【免费下载链接】UniversalSplitScreen Split screen multiplayer for any game with multiple keyboards, mice and controllers. 项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScreen 还在为…

作者头像 李华