当前位置: 首页 > news >正文

std::iota

std::iota 是 C++ 标准库中的一个算法,用于生成一个连续的递增序列。它定义在 <numeric> 头文件中。

函数原型

template <class ForwardIterator, class T>
void iota(ForwardIterator first, ForwardIterator last, T value);

参数说明

  • firstlast: 要填充的范围的前向迭代器

  • value: 初始值,序列从这个值开始递增

基本用法示例

#include <iostream>
#include <vector>
#include <numeric>  // 需要包含这个头文件int main() {// 1. 基本用法:从0开始填充std::vector<int> vec1(5);std::iota(vec1.begin(), vec1.end(), 0);// vec1: [0, 1, 2, 3, 4]// 2. 从其他数值开始std::vector<int> vec2(5);std::iota(vec2.begin(), vec2.end(), 10);// vec2: [10, 11, 12, 13, 14]// 3. 使用负数和浮点数std::vector<float> vec3(5);std::iota(vec3.begin(), vec3.end(), -2.5f);// vec3: [-2.5, -1.5, -0.5, 0.5, 1.5]// 4. 输出结果for (int val : vec1) std::cout << val << " ";std::cout << std::endl;for (int val : vec2) std::cout << val << " ";std::cout << std::endl;for (float val : vec3) std::cout << val << " ";std::cout << std::endl;return 0;
}

更多实用示例

示例1:生成字母序列

#include <vector>
#include <numeric>
#include <iostream>int main() {std::vector<char> letters(5);std::iota(letters.begin(), letters.end(), 'A');// letters: ['A', 'B', 'C', 'D', 'E']for (char c : letters) std::cout << c << " ";std::cout << std::endl;return 0;
}

示例2:填充数组的一部分

#include <iostream>
#include <vector>
#include <numeric>int main() {std::vector<int> vec(10, -1);  // 初始化为-1// 只填充中间部分std::iota(vec.begin() + 2, vec.end() - 2, 100);// vec: [-1, -1, 100, 101, 102, 103, 104, -1, -1, -1]for (int val : vec) std::cout << val << " ";std::cout << std::endl;return 0;
}

示例3:与其他容器配合

#include <iostream>
#include <list>
#include <numeric>
#include <array>int main() {// 用于 std::liststd::list<int> lst(5);std::iota(lst.begin(), lst.end(), 5);// lst: [5, 6, 7, 8, 9]// 用于 std::arraystd::array<int, 4> arr;std::iota(arr.begin(), arr.end(), 20);// arr: [20, 21, 22, 23]for (int val : lst) std::cout << val << " ";std::cout << std::endl;for (int val : arr) std::cout << val << " ";std::cout << std::endl;return 0;
}

示例4:生成索引序列

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>int main() {std::vector<std::string> fruits = {"apple", "banana", "orange", "grape", "pear"};std::vector<size_t> indices(fruits.size());// 生成索引 0, 1, 2, 3, 4std::iota(indices.begin(), indices.end(), 0);// 使用索引访问元素for (size_t idx : indices) {std::cout << idx << ": " << fruits[idx] << std::endl;}return 0;
}

示例5:与算法结合使用

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <random>int main() {std::vector<int> data(8);std::iota(data.begin(), data.end(), 1);// data: [1, 2, 3, 4, 5, 6, 7, 8]// 打乱顺序std::random_device rd;std::mt19937 g(rd());std::shuffle(data.begin(), data.end(), g);std::cout << "Shuffled: ";for (int val : data) std::cout << val << " ";std::cout << std::endl;// 重新排序std::iota(data.begin(), data.end(), 1);std::cout << "Resorted: ";for (int val : data) std::cout << val << " ";std::cout << std::endl;return 0;
}

性能特点

  • 高效std::iota 通常比手写循环更快,因为编译器可以对其进行更好的优化

  • 安全:避免了手动索引可能出现的越界错误

  • 清晰:代码意图明确,易于理

注意事项

  1. 确保目标范围有足够的空间

  2. 迭代器必须是前向迭代器或更强类型的迭代器

  3. 值类型必须支持 ++ 操作符

std::iota 是生成连续序列时最简洁、最高效的方法之一,特别适合与STL算法配合使用。

http://www.dtcms.com/a/524315.html

相关文章:

  • SQL进阶:not exists谓词
  • Eclipse 添加书签
  • 2025年渗透测试面试题总结-217(题目+回答)
  • 专业网站建设市场豫建市2021 42号
  • 自己做的网站不满屏单纯做网站的公司
  • 在本地部署LangManus
  • wordpress 网站投票网站使用特殊字体
  • 视觉Transformer实战 | Transformer详解与实现
  • 032:vue+threejs 实现物体点击后在地面上拖动平移,点击地面可旋转
  • Java 中数组和集合的遍历方式
  • 网站建设评估及分析wordpress 视频 批量
  • 自己开发网站需要什么技术青海网站建设与维护
  • sqli-labs第二关
  • 大数据Spark(七十):Transformation转换算子cogroup和zip使用案例
  • Drools在java中的使用
  • 【办公类-121-02】20251024淘宝视频红包(UIBOT点击“左箭头”“视频”“消息”切换)
  • 9 种高级 RAG 技术及其实现方法
  • 计算机网络面试核心知识点大全
  • 做网站建站现在什么传奇最火电脑版
  • C语言需要掌握的基础知识点之图
  • 做一个类似京东的网站海外注册公司
  • python舆情分析可视化系统 情感分析 微博 爬虫 scrapy爬虫技术 朴素贝叶斯分类算法大数据 计算机✅
  • 压缩与缓存调优实战指南:从0到1根治性能瓶颈(六)
  • 做百度手机网站优化点asp网站制作教程
  • element+vue3 table上下左右键切换input和select
  • 元萝卜 1.0.27| 免Root,XP模块框架,支持应用多开分身,一键微信平板模式
  • 长春企业网站seo珠海企业官网设计制作
  • MySQL 函数详细说明
  • 《Memcached 连接:深入理解与优化实践》
  • C++ EigenSolver无优化模式下报错分析