C++谓词
bool com(const string& a){return a.size() < 5;
}
int main()
{
vector<string> name = {"namenamename","zhangzhang","yuyu"};
for (auto &a : name){
auto aa = partition(a.begin(),a.end(),com);
for (;aa<=a.end();aa++){
cout <<*aa<<" ";
}
}
return 0;
}
std::__cxx11::basic_string<char>&' from expression of type 'char'
else if (!bool(__pred(*__last)))
这里一直再报这个错误,这是为什么? 这个程序中出现错误是因为 partition 函数的使用有误。 partition 函数是用来对范围内的元素进行重新排列,使得满足指定条件的元素在前面,不满足条件的元素在后面,并返回第一个不满足条件的元素的迭代器。在这个例子中, partition 函数被错误地用在了 string 对象上,而不是 vector<string> 上。
正确的做法是将 partition 函数应用于 vector<string> ,并且在lambda表达式中传递 com 谓词函数来进行分区。下面是修改后的代码:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
bool com(const std::string& a){
return a.size() < 5;
}
int main()
{
std::vector<std::string> name = {"namenamename", "zhangzhang", "yuyu"};
for (auto &a : name){
auto aa = std::partition(a.begin(), a.end(), com);
for (auto it = a.begin(); it != aa; ++it){
std::cout << *it << " ";
}
std::cout << std::endl;
}
return 0;
}
这样修改后,程序将正确地输出每个字符串中长度小于5的部分。
页:
[1]