首页 > 后端开发 > C++ > 正文

c++23的std::ranges::to怎么用_c++范围库到容器的转换

尼克
发布: 2025-12-15 18:12:06
原创
735人浏览过
std::ranges::to 可将范围转换为指定容器,支持自动类型推导,如 std::views::iota(1, 6) | std::ranges::to() 生成 vector{1,2,3,4,5},也可转为 list、deque、array 等,要求 array 大小匹配。

c++23的std::ranges::to怎么用_c++范围库到容器的转换

在 C++23 中,std::ranges::to 是一个便捷的工具函数,用于将任意范围(range)转换为指定的容器类型。它简化了从迭代器范围构造容器的过程,支持自动推导目标容器类型,也可显式指定。

基本用法:将范围转换为容器

std::ranges::to 可以接收一个范围(如数组、vector、views 等),并将其元素复制到新的容器中。最常见的是转为 std::vectorstd::liststd::array

示例:

auto vec = std::views::iota(1, 6) | std::ranges::to<:vector>>(); // 结果:vec 包含 {1, 2, 3, 4, 5}

这里使用了 std::views::iota 生成从 1 到 5 的整数序列,并通过 std::ranges::to 转为 vector。

立即学习C++免费学习笔记(深入)”;

自动类型推导(C++23 支持)

如果你不显式指定模板参数,std::ranges::to 可结合上下文自动推导目标容器类型。

例如:

Tanka
Tanka

具备AI长期记忆的下一代团队协作沟通工具

Tanka 146
查看详情 Tanka
std::vector numbers{1, 2, 3, 4, 5}; auto doubled = numbers | std::views::transform([](int x){ return x * 2; }) | std::ranges::to<:vector>(); // 自动推导为 vector

注意:省略 ,由输入范围元素类型自动确定。

转换为其他容器

除了 vector,你也可以转为 list、deque、set 等:

auto as_list = numbers | std::ranges::to<:list>>(); auto as_deque = std::views::take(numbers, 3) | std::ranges::to<:deque>();

支持任意满足容器要求的目标类型,只要其支持范围构造函数。

固定大小数组(std::array)

如果源范围大小已知且编译期可确定,可以转为 std::array

std::array arr = std::views::iota(0, 3) | std::ranges::to<:array>>(); // arr == {0, 1, 2}

注意:目标 std::array 的大小必须与实际元素个数匹配,否则编译错误

基本上就这些。std::ranges::to 让范围转容器变得简洁直观,配合 views 使用非常自然。

以上就是c++++23的std::ranges::to怎么用_c++范围库到容器的转换的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号