[英]Push into vector in reverse order
如何以相反的顺序将char[]
数组中的char[]
推入std::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
是因为你想从c
跳过尾随\\0
。
#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'
。
如果你想使用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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.