当前位置: 首页 > 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,可尝试方法四。

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

相关文章:

  • 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:数据创新与智能决策的云端利器
  • 软件工程之需求分析涉及的图与工具
  • 基于大模型的计划性剖宫产全流程预测与方案优化研究报告
  • 案例解读 | IT监控如何重塑财务公司运维体系
  • vue中操作dom,实现元素的拖拉拽
  • Linux系统管理与编程15:vscode与Linux连接进行shell开发
  • 1688代采系统:技术架构与应用实践
  • iOS 模块化开发流程
  • Axios替代品Alova
  • 【计算机网络】用户从输入网址到网页显示,期间发生了什么?
  • RPC、gRPC和HTTP的区别
  • 树状数组的操作问题--Python