如何将char[]
数组中的 byesstd::vector<char>
以相反的顺序推入?例如我想推
char c[] = "a string";
进入
std::vector<char> v;
这样最终v
将包含
{'g','n','i','r','t','s',' ','a'}
?
std::string cString(c);
std::vector<char> v(cString.rbegin(), cString.rend());
或者
v.insert(v.end(), cString.rbegin(), cString.rend());
对于现有向量。
使用反向迭代器:
typedef std::reverse_iterator<const char*> r_it;
std::vector<char> v ( r_it(std::end(c)), r_it(std::begin(c)) );
在 C++14 中,我们将能够做到
std::vector<char> v( std::crbegin(c), std::crend(c) );
要附加到现有向量,请使用
v.insert( v.end(), rbegin, rend );
如果不想使用 std::string (避免分配等),您可以reverse_iterator
显式使用。我使用辅助函数,因为我讨厌明确指定模板参数:
template <class It>
std::reverse_iterator<It> make_reverse(It it)
{
return std::reverse_iterator<It>(it);
}
...
char c[] = "a string";
std::vector<char> v( make_reverse(std::end(c)) + 1, make_reverse(std::begin(c)) );
之所以存在,+1
是因为您想跳过\0
.c
如果您想使用reverse_copy
:
char c[] = ...;
std::vector<char> vec;
// Avoid to copy the terminating '\0': Don't add +1 to strlen(c)
std::reverse_copy(c, c+strlen(c), std::back_inserter(vec));
#include <algorithm>
#include <iterator>
[...]
char c[] = "a string";
std::vector<char> v;
std::reverse_copy(c, c + sizeof(c)/sizeof(c[0]), std::back_inserter(v));
感谢 chris 在评论中最初建议 reverse_copy。
请注意,使用这种方法,您将'\0'
在向量的第一个元素中获得 a。