Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
反向向量项,但不是第一个?C++_C++ - Fatal编程技术网

反向向量项,但不是第一个?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());