gpt4 book ai didi

c++ - Erase——删除成语c++(无友元函数)

转载 作者:太空宇宙 更新时间:2023-11-04 15:59:05 24 4
gpt4 key购买 nike

我有两个类:

#include <iostream>
#include <vector>
#include <string>
#include <stdexcept>
#include <algorithm>
#include <cmath>
#include <list>
using namespace std;

enum class Programm{Koch, Normal, Bunt, Fein};

class KleidSt {
private:
string bezeichnung;
int gewicht;
Programm Pflegehinweis;

public:
KleidSt(string bezeichnung, int gewicht);
KleidSt(string bezeichnung, int gewicht, Programm Pflegehinweis);
int get_gewicht() const;
bool vertraeglich(Programm)const;
int get_Pflegehinweis() const;
friend ostream& operator<<(ostream& os, const KleidSt& kleid);
};


class WaschM{
private:
int ladungsgewicht;
vector<KleidSt> wasch;
public:
WaschM(int ladungsgewicht);
void zuladen(const vector<KleidSt>& z);
void waschen(Programm);
friend ostream& operator<<(ostream& os, const WaschM& kleid);
int programme() const;
vector<KleidSt> aussortieren(Programm pr);
};

我想创建函数 vector<KleidSt> aussortieren(Programm) , 这将删除 wasch 中的所有元素 vector ,如果这些元素将具有 Pflegehinweis更高的属性(通过使用 static_cast<int>(elem) 函数)则由 aussortieren 定义函数并将返回已删除元素的 vector 。

我的第一个尝试是使用 Erase-remove 习语:

vector<KleidSt> WaschM::aussortieren(Programm pr){
wasch.erase(remove_if(begin(wasch), end(wasch), vertraeglich(pr)), end(wasch));
return wasch;
}

这里vertraeglich(pr)做我上面描述的工作。但它显然返回错误,因为 vertraeglich函数定义在类 WaschM 的范围之外.问题是:我怎样才能使用 Erase–remove 习语(或者其他一些变体),这样代码才能工作?

最佳答案

看起来像是 lambda 函数的工作

vector<KleidSt> WaschM::aussortieren(Programm pr){
wasch.erase(
remove_if(
begin(wasch),
end(wasch),
[&](const KleidSt& k){ return k.vertraeglich(pr); }),
end(wasch));
return wasch;
}

未经测试的代码。

关于c++ - Erase——删除成语c++(无友元函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com