如何将char[]
数组中的字节按相反的顺序推送到std::vector<char>
?例如我想推
char c[] = "a string";
到
std::vector<char> v;
这样最终v
将包含
{'g','n','i','r','t','s',' ','a'}
答案 0 :(得分:9)
std::string cString(c);
std::vector<char> v(cString.rbegin(), cString.rend());
或
v.insert(v.end(), cString.rbegin(), cString.rend());
现有的矢量。
答案 1 :(得分:4)
使用反向迭代器:
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 );
答案 2 :(得分:4)
如果不想使用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
。
答案 3 :(得分:1)
#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));
感谢克里斯最初在评论中建议使用reverse_copy。
请注意,使用此方法,您将在向量的第一个元素中获得'\0'
。
答案 4 :(得分:1)
如果您想使用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));