繁体   English   中英

以相反的顺序推入向量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM