You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在标准C++中初始化static inline std::vector为0到65534的连续序列

解决方案

方案1:C++20及以上标准(最简洁,完全匹配需求)

直接用std::views::iota配合范围转容器接口,一行即可完成初始化,全程使用标准C++特性,无需任何编译器扩展或者额外初始化调用:

#include <vector>
#include <ranges>
#include <cstdint>
#include <limits>

class YourClass {
public:
    static inline const std::vector<uint16_t> seq = 
        std::views::iota(0u, std::numeric_limits<uint16_t>::max()) 
        | std::ranges::to<std::vector>();
};

std::views::iota生成的序列默认不包含终止值,所以直接填入std::numeric_limits<uint16_t>::max()就刚好生成0到max()-1的全部整数,完全符合需求。

方案2:兼容C11~C17的标准实现

如果编译环境不支持C20,可以使用立即调用Lambda表达式(IIFE)完成初始化,C11及以上版本均支持该写法:

#include <vector>
#include <cstdint>
#include <limits>
#include <numeric>

class YourClass {
public:
    static inline const std::vector<uint16_t> seq = [](){
        std::vector<uint16_t> tmp(std::numeric_limits<uint16_t>::max());
        std::iota(tmp.begin(), tmp.end(), 0u);
        return tmp;
    }();
};
  • 该方案在程序启动阶段自动执行Lambda完成容器填充,不需要用户额外调用任何初始化函数,全程符合标准C++规范。
  • 如果编译器不支持static inline类成员(该特性为C++17引入),只需要去掉inline关键字,在类外单独定义该静态成员即可,填充逻辑完全不变。

内容的提问来源于stack exchange,提问作者selamba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:24:05