c++ std::transform算法怎么用 c++ STL数据转换【实例】
技术百科
尼克
发布时间:2025-12-27
浏览: 次 std::transform 是 C++ STL 中用于批量转换数据的通用算法,支持单序列一元变换(如平方、转大写)、双序列二元运算(如向量加法)、就地转换及配合 back_inserter 动态扩容,要求目标空间足够或满足不重叠写入条件。
std::transform 是 C++ STL 中用于批量转换数据的通用算法,核心作用是把一个(或两个)输入范围的元素,按指定规则处理后,写入到目标位置。它不改变原容器大小,只做“映射”操作,类似函数式编程里的 map。
单序列转换:一元操作
最常用场景:对容器每
个元素做统一变换,比如全部转大写、平方、取绝对值等。
- 需要提供起始/结束迭代器、目标起始迭代器、一个可调用对象(lambda、函数指针、函数对象)
- 目标容器必须有足够空间(可用 back_inserter 扩容,但注意性能)
示例:把 vector 中每个数平方
vectorvector
std::transform(src.begin(), src.end(), dst.begin(), [](int x) { return x * x; });
// dst → {1, 4, 9, 16}
双序列合并转换:二元操作
用两个输入范围,对应位置元素一起参与运算,结果写入目标位置。两范围长度需一致(或至少保证不越界)。
- 传入两个输入迭代器对,一个输出起始,一个接受两个参数的可调用对象
- 常用于向量加法、逐元素乘积、字符串拼接等
示例:两个 vector 对应相加
vectorvector
vector
std::transform(a.begin(), a.end(), b.begin(), res.begin(), std::plus
// res → {11, 22, 33}
目标写入到源容器自身(就地转换)
只要目标起始位置与源不重叠(或严格满足“输出不覆盖未读取输入”),就可以直接写回原容器。
- 常见于修改原容器内容,如全部变负、转小写
- 避免用 end() 当目标起点;用 begin() 是安全的(因 transform 顺序读取+写入)
示例:字符串每个字符转小写
string s = "ABC";std::transform(s.begin(), s.end(), s.begin(), ::tolower);
// s → "abc"
配合 inserter 或 back_inserter 动态扩容
当目标容器初始为空,又想自动追加结果时,可用插入迭代器。
- back_inserter 适用于支持 push_back 的容器(vector、deque、list)
- 注意:频繁 push_back 可能引发多次内存重分配,预估大小更高效
示例:从 set 提取偶数并放入新 vector
setvector
std::transform(nums.begin(), nums.end(), back_inserter(evens),
[](int x) { return x * 2; });
// evens → {2, 4, 6, 8, 10}
# 它不
# 适用于
# 为空
# 迭代
# 最常用
# keji
# 就可以
# 只做
# 对象
# c++
# String
# int
# 指针
# 字符串
# 算法
# map
# Lambda
# transform
# 批量转换
# 有足够
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- C++中的constexpr和const有什么区别
- Python爬虫项目实战教程_Scrapy抓取与存
- php本地部署后session无法保存_sessi
- 如何在 Go 结构体中正确初始化 map 字段
- Win11怎样安装剪映专业版_Win11安装剪映教
- php嵌入式需要什么环境_搭建php+linux嵌
- 如何在 Go 中正确反序列化 XML 多节点数组(
- 如何在Golang中处理URL参数_Golang
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- php怎么下载安装后设置错误日志_phpini l
- Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱
- 如何使用Golang编写单元测试_创建Test函数
- 如何高效删除 NumPy 二维数组中所有元素相同的
- C++如何编写函数模板?(泛型编程入门)
- Win10电脑怎么设置休眠快捷键_Windows1
- Windows10如何重置此电脑_Windows1
- C++ STL算法库怎么用?C++常用算法函数(s
- Win11 C盘满了怎么清理 Win11磁盘清理和
- Win11怎么恢复旧版开始菜单_通过软件还原Win
- Python数据抓取合法性_合规说明【指导】
- Python音视频处理高级项目教程_FFmpegP
- 如何提升Golang程序I/O性能_Golang
- Win11如何设置系统声音_Win11系统声音调整
- Windows10系统怎么查看显卡驱动_Win10
- php485在php5.6下能用吗_php485旧
- 如何解决Windows时间不准的问题?(自动同步设
- Win11无法识别耳机怎么办_解决Win11插耳机
- Windows10电脑怎么连接蓝牙设备_Win10
- Win11怎么设置单手模式_Win11触控键盘布局
- 如何在 Python 中将 ISO 8601 时间
- Windows10怎样设置家长控制_Windows
- Win11任务栏怎么放到顶部_Win11修改任务栏
- C++如何获取CPU核心数?(std::threa
- 如何在Golang中修改数组元素_通过指针实现原地
- php订单日志怎么记录评价_php记录订单评价日志
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- Linux如何使用Curl发送请求_Linux下A
- Win11怎么退出微软账户_切换Win11为本地账
- 如何使用Golang处理网络超时错误_Golang
- Python生成器表达式内存优化_惰性计算说明【指
- Mac如何设置动态壁纸?(让桌面动起来)
- php8.4xdebug无法调试怎么办_php8.
- c++如何获取map中所有的键_C++遍历键值对提
- mac怎么打开终端_MAC终端Terminal使用
- 如何在Golang中指定模块版本_使用go.mod
- Win11怎么开启窗口对齐助手_Windows11
- Mac如何使用听写功能_Mac语音输入打字【效率技
- php报错怎么查看_定位PHP致命错误与警告的方法
- PHP的FastAdmin架构适合二次开发吗_特点
- 短链接还原php提示内存不足_调整PHP内存限制设

QQ客服