当前位置: 首页 > 知识库问答 >
问题:

如何填充constd::array基于函数的值

凌钊
2023-03-14

如何创建包含以下值f(0),f(1),…,f(N-1)的const std::数组,其中f是任何函数:静态constexpr size_t f(int index)?当我确切地知道N时,我显然可以写

const std::array<size_t, 5> a = {f(0), f(1), f(2), f(3), f(4)}

共有3个答案

田成化
2023-03-14

如果想在不创建外部函数的情况下对其进行const-initialize,也可以这样做:

void SomeFunction() {

    const auto my_array = [](){
        auto a = array<SomeType, N>();
        for (size_t i = 0; i < a.size(); ++i)
            a[i] = f(i);
        return a;
    }(); // <-- Note that the lambda executes right away

    DoSomeStuff(my_array);
}
方和宜
2023-03-14

可能需要抛光,但我就是这么想的:

template <std::size_t... ns, typename Fn>
auto fill_helper(std::integer_sequence<std::size_t, ns...>, Fn&& fn) -> std::array<decltype(fn(std::size_t())), sizeof...(ns)>  {
    return {{fn(ns)...}};
} 

template <std::size_t N, typename Fn>
auto fill(Fn&& fn) {
    using seq = std::make_integer_sequence<std::size_t, N>;
    return fill_helper(seq(), std::forward<Fn>(fn));    
}

int main() {

    auto plus5 = [](std::size_t index) {
        return index + 5;
    };

    auto const as = fill<5>(plus5);
    for (auto&& a: as)
        std::cout << a;

}

优点是使用正确的值初始化数组,而不是先初始化然后赋值。

陶树
2023-03-14

创建需要任意复杂初始化的常量的一般技术是,只需编写一个返回所需值的函数,然后在常量的初始值设定项中调用该函数。例如:

template <typename T, size_t N>
array<T, N> init_from_f() {
    array<T, N> a;
    for (size_t i = 0; i < N; ++i)
        a[i] = f(i);
    return a;
}

const auto const_array = init_from_f<sometype, 42>();
 类似资料:
  • 我有以下服务器.js获取路由 这是我的客户端js,我用jQuery获取完全相同的get 当我打开index.html时,它会正确显示用户交互界面,并在我的终端中执行我的server.js它会正确显示url。我无法完成的是如何使用我的jQuery接收到的数据来填充我的html中的表。我的表将填充从我的endpoint获取的url。 我有一些nodejs的背景,但我不能总结这个。

  • 你有时能看到用另一种不同的接口(不同参数和返回值)实现addTime这样的函数。addTime函数不是在每次调用时都创建一个新对象,而是要求调用者提供一个“空对象”用以存储其结果。请将下述代码和之前版本做比较: void addTimeFill (const Time& t1, const Time& t2, Time& sum) { sum.hour = t1.hour + t2.hou

  • 我有一个数据网格,其中组合框是从Db填充的。 我试图实现的是,当我在“Esercizio”列中选择一些内容时,“Video”列的单元格会自动填充Db的“link_video”列中的相应值。 因此,如果我选择“回扣”,我需要在文本框单元格中看到来自db的回扣链接视频。 这是我用来在表单加载时填充组合框的代码: private void Myform_Load(对象发送方,EventArgs e) {

  • 本文向大家介绍基于jQuery的表单填充实例,包括了基于jQuery的表单填充实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇基于jQuery的表单填充实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。