如何有效地附加一个临时向量(在编译时定义)?

How to append a temporary vector (defined at compile time) efficiently?

我有一个在运行时创建的 std::vector<char> v,我想向其附加 {'a', 'k', 'e', 'e', 'f'}

我可以对每个单独的字母做 v.emplace_back,或者我可以创建一个左值向量并存储 {'a', 'k', 'e', 'e', 'f'},然后将 insert 与迭代器一起使用,但我不这样做不喜欢这两种方法中的任何一种,因为前者需要额外的行(我必须在代码的几个部分中这样做),并且字母需要创建一个左值向量(可能是一些效率问题)?

有更好的方法吗?我基本上是在寻找 1-2 班轮,例如

v.emplace_back({'a', 'k', 'e', 'e', 'f'}); // doesn't work

我忘了提到 v 的容量是为容纳这个临时向量而保留的——但这可能不相关,但是?

这是一种(严重的,容易出错的)方法:

std::vector<char> vect;

auto const & x = "abcdef";
vect.insert(vect.end(), &(x[0]), x + sizeof(x) - 1)

没有临时对象,x只是一个字符串文字。

就我个人而言,我绝对会编写尽可能可读的代码(即不像我上面的代码片段)。不要关心任何(想象的)效率损失,除非你测量它并找出有问题的代码段是什么。

vector::insert() 有一个重载接受 std::initializer_list 作为输入,它可以从 brace-list 构造,例如:

v.insert(v.end(), {'a', 'k', 'e', 'e', 'f'});

Online Demo