反向矢量项但不是第一个? C ++

时间:2014-09-08 07:58:51

标签: c++

我有一个载体

std::vector<std::string> letters; // {{A, B, C,}, {A}, {B, C, D, E}}

我想颠倒顺序,但不是每个向量的第一个字母。我该怎么做?

所以它会是

{{A, C, B}, {A}, {B, E, D, C}}

我试着这样做:

std::reverse(letters.begin(), letters.end());
for (int i=0;i<letters.size();i++)
  cout << letters[i];

但它崩溃了我

2 个答案:

答案 0 :(得分:4)

你可以像下面的例子那样做:

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>

int main() {
  std::vector<std::string> letters {"ABC", "A", "BCDE", ""};
  std::for_each(letters.begin(), letters.end(), [](std::string &str) { if(!str.empty()) std::reverse(str.begin() + 1, str.end()); });
  for(auto i : letters) std::cout << i << std::endl;
}

LIVE DEMO

您的代码中出错了什么:

std::reverse(letters.begin(), letters.end());适用于您的初始向量(即,它会反转letters中字符串的顺序,它不会反转向量的字符串。)

答案 1 :(得分:0)

要在原位反转矢量,可以使用std::reverse

std::reverse(letters.begin() + 1, letters.end());

要在输出上反转它们,保持矢量不变,您可以使用vector::rbegin()vector::rend()

反向迭代矢量