压入从0到Nvector(C++)

方法一:简单循环 + 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::iota

std::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,可尝试方法四。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值