【发布时间】:2020-05-22 20:39:17
【问题描述】:
我正在尝试从std::vector 中删除空条目。这是一个示例代码,但这里有问题。
#include <iostream>
#include <string>
#include<vector>
#include <cctype>
int main()
{
std::vector<std::string> s1 = {"a"," ", "", "b","c"," ","d"};
for (auto it = s1.begin(); it != s1.end() && isspace(*it); )
{
it = s1.erase(it);
}
std::cout<<"vector size = "<<s1.size();
for (auto &i:s1)
std::cout<<i<<"\n";
}
我正在运行for 循环来找出空元素并从那里删除。应该也有 STL 方法,但不确定它是如何工作的。
【问题讨论】:
-
isspace()需要int(历史上,但实际上是一个字符),但您提供了std::string。那不兼容。您可以改为检查(*it == "" || *it == " ")。 -
您的
for循环尝试仅从vector的开头删除“空”条目。一旦它遇到一个非“空”条目 - 它就会停止。 -
当你认为“有问题”时,你应该想想为什么你认为有问题。它是否编译?有编译错误吗?如果不是,它的行为是否符合您的预期?你期望它的表现如何?它的行为如何?
-
std::remove_if是您要找的。span>
标签: c++ string algorithm c++11 vector