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

压入从0到Nvector(C++)

压入从0到N到vector

  • 方法一:简单循环 + push_back
  • 方法二:构造时指定大小 + std::iota
  • 方法三:使用算法 std::generate_n
  • 方法四(C++20):Ranges + std::views::iota
  • 选择建议

方法一:简单循环 + push_back

#include <vector>std::vector<int> v;
v.reserve(N + 1);            // 预分配空间,避免多次 realloc
for (int i = 0; i <= N; ++i) {v.push_back(i);
}
  • 核心思想:每次 push_back 一个新元素

  • 优势:直观易懂

  • 小贴士:事先 reserve(N+1) 可以避免动态扩容开销

方法二:构造时指定大小 + std::iota

#include <vector>
#include <numeric>  // for std::iotastd::vector<int> v(N + 1);
std::iota(v.begin(), v.end(), 0);
  • 核心思想:一次性分配好长度,再用 std::iota 填充从 0 开始的连续整数

  • 优势:代码简洁,效率高

  • 注意:需要 #include

方法三:使用算法 std::generate_n

#include <vector>
#include <algorithm>std::vector<int> v;
v.reserve(N + 1);
int x = 0;
std::generate_n(std::back_inserter(v), N + 1, [&x]() { return x++; });
  • 核心思想:借助 STL 算法和迭代器适配器,一次性生成 N+1 个值

  • 优势:风格较函数式,避免显式循环

方法四(C++20):Ranges + std::views::iota

#include <vector>
#include <ranges>auto rng = std::views::iota(0, N + 1);
std::vector<int> v{rng.begin(), rng.end()};
  • 核心思想:利用 C++20 的范围视图,生成一个惰性 iota 序列,再拷贝到 vector

  • 优势:最简洁、现代化,但需编译器支持 C++20

选择建议

  • 如果你只需要简单易懂的代码,方法一最合适。

  • 如果追求简洁与性能,推荐方法二:一次性分配 + std::iota。

  • 若项目已启用 C++20,可尝试方法四。

相关文章:

  • window 显示驱动开发-处理内存段(一)
  • 视频编解码学习9之照相机历史
  • AWS之存储服务
  • G口大带宽服务器线路怎么选
  • BUUCTF————朴实无华
  • python基础:序列和索引-->Python的特殊属性
  • 如何使用极狐GitLab 软件包仓库功能托管 python?
  • 真相与幻象的博弈:AI“幻觉”的生成密码与治理革命
  • Wireshark基本使用
  • 基于Qt开发的http/https客户端
  • AWS VPC架构师指南:从零设计企业级云网络隔离方案
  • 学成在线之课程管理
  • 第四章:基于langchain构造一个完整RAG系统
  • C++从入门到实战(十四)初识STL与STL简介
  • 2025年3月电子学会等级考试五级题——4、收费站在哪里
  • ruoyi-flowable-plus 前端框架启动报错修复
  • 【C++游戏引擎开发】第34篇:C++实现反射
  • 神经网络—感知器、多层感知器
  • Azure Databricks:数据创新与智能决策的云端利器
  • 软件工程之需求分析涉及的图与工具
  • 《2025城市青年旅行消费报告》发布,解码青年出行特征
  • 纪录片《中国》原班人马打造,《船山先生》美学再升级
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记
  • 住宿行业迎“最火五一”:数千家酒店连续3天满房,民宿预订量创历史新高
  • 文旅部:加强对景区索道、游船等设施设备安全隐患排查整治
  • 两个灵魂,一支画笔,意大利艺术伴侣的上海灵感之旅