gpt4 book ai didi

c++ - 初始化 vector 的高效而优雅的方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:47 25 4
gpt4 key购买 nike

给定以下 C++14 代码:

struct A { /* heavy class, copyable and movable */ };

// complex code to create an A
A f(int);
A g(int);
A h(int);

const std::vector<A> v = { f(1), g(2), h(3) };

我知道 A initializer_list 中的 被复制到 vector 中,而不是被 move (stackoverflow 中有很多关于此的问题)。

我的问题是:如何将它们 move 到 vector 中?

我只能做丑陋的 IIFE(保留 v 常量)并且只是避免了 initializer_list:

const std::vector<A> v = []()
{
std::vector<A> tmp;
tmp.reserve(3);
tmp.push_back( f(1) );
tmp.push_back( g(2) );
tmp.push_back( h(3) );
return tmp;
}();

是否有可能使这种优雅的变得高效?

PD:v 必须std::vector<A>以备后用

最佳答案

不确定它是否算作“优雅”,但您可以使用一个数组(或 std::array),它使用不会遇到此问题的聚合初始化和 move_iterator 将值 move 到 vector 中。

std::array<A, 3> init = { f(1), g(2), h(3) };

std::vector<A> v{std::make_move_iterator(init.begin()),
std::make_move_iterator(init.end())};

Live demo .

关于c++ - 初始化 vector 的高效而优雅的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43677016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com