如何有效地附加一个临时向量(在编译时定义)?
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'});
我有一个在运行时创建的 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'});