我有一个载体
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];
但它崩溃了我
答案 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;
}
std::reverse(letters.begin(), letters.end());
适用于您的初始向量(即,它会反转letters
中字符串的顺序,它不会反转向量的字符串。)
答案 1 :(得分:0)
要在原位反转矢量,可以使用std::reverse
:
std::reverse(letters.begin() + 1, letters.end());
要在输出上反转它们,保持矢量不变,您可以使用vector::rbegin()
和vector::rend()