反向向量项,但不是第一个?C++
我有一个向量反向向量项,但不是第一个?C++,c++,C++,我有一个向量 std::vector<std::string> letters; // {{A, B, C,}, {A}, {B, C, D, E}} 我试着做: std::reverse(letters.begin(), letters.end()); for (int i=0;i<letters.size();i++) cout << letters[i]; 但是它在我身上崩溃了你可以像下面的例子那样做: #include <iostream>
std::vector<std::string> letters; // {{A, B, C,}, {A}, {B, C, D, E}}
我试着做:
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::reverseletters.begin,letters.end;适用于初始向量,即,它反转字母中字符串的顺序,但不反转向量的字符串。要反转向量,可以使用std::reverse:
要在输出时反转它们,保持向量不变,可以使用vector::rbegin和vector::rend以相反的方向迭代向量在进入For循环之前,在元素的数量上添加一个测试条件……为什么它会在带有on元素的向量上崩溃?v、 在这种情况下,begin+1==v.end。它可能会在一个空向量上崩溃。循环不会反转字母,而是从第二个字母2开始打印字符串。这是一个很好的解决方案,但是我认为在调用std::reverse之前需要检查字符串是否为空。@SebastianK在C++11 std::string以null结尾之后。因此,永远不要空着;这在C++11中有效,但在C++98中无效?有趣:@SebastianK是的,但发布的解决方案使用lambdas。所以适用于C++11。@402这是错误的。在一些特定的上下文中,字符串可能以null结尾,但后面的null不是字符串的一部分。空字符串仍然是空的,其上的s.begin==s.end,并且s.begin+1仍然是未定义的行为。
#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() + 1, letters.end());