反转矢量项而不是第一个?C++

Reverse vector items but not the first one? C++

本文关键字:第一个 C++      更新时间:2023-10-16

我有一个矢量

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];

但它在我身上崩溃了

您可以像下面的示例一样进行操作:

#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;
}

现场演示

您在代码中做错了什么:

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

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

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

要在输出时反转它们,保持向量不变,可以使用vector::rbegin()vector::rend() 在相反的方向上迭代向量