在C++98/03中,不使用for-循环怎么将C-数组按反向顺序附加到向量中?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (68)

将C数组附加到向量(在C++98/03中)非常简单,如下所示:

std::vector<int> vec;
const int array[5] = { 1 , 2 , 3 , 4 , 5};

vec.insert( vec.end() , array , array + 5 );

是否有方法以相反的顺序将数组附加到向量中?前提是无需编写for-循环.。

提问于
用户回答回答于

使用std::reverse_copystd::back_inserter添加元素的矢量:

std::vector<int> vec;
int array[5] = { 1 , 2 , 3 , 4 , 5};

std::reverse_copy(array , array + 5, std::back_inserter(vec));
用户回答回答于
vec.insert(std::end(vec),
           std::rbegin(array),
           std::rend(array));

请注意,这使用了C++14,但是反向迭代器已经存在得更久了,如果使用旧的标准,你只需要手动创建它们:

int const a1[] = {1, 2, 3, 4, 5};
int a2[5];
std::copy(std::reverse_iterator<int const*>(std::end(a1)),
          std::reverse_iterator<int const*>(std::begin(a1)),
          std::begin(a2)); // copy in reverse

std::copy(std::begin(a2),
          std::end(a2),
          std::ostream_iterator<int>(std::cout, " ")); // prints "5 4 3 2 1 "

扫码关注云+社区

领取腾讯云代金券