QT c++ STL使用二元谓词

QT c++ STL使用二元谓词

https://blog.csdn.net/txwtech/article/details/104391624

https://blog.csdn.net/txwtech/article/details/103754300

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication1.h"

class QtWidgetsApplication1 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget *parent = nullptr);
    void CompareTest();
    bool absLess(int elem1, int elem2);
    ~QtWidgetsApplication1();
    

private:
    Ui::QtWidgetsApplication1Class ui;
};
template <typename T1, typename T2>
class AbsLess {
public:
    bool operator()(T1& t1, T2& t2)
    {
        return t1 < t2;
    }
};

 

#include "QtWidgetsApplication1.h"
#include <qmessagebox.h>
#include <deque>
#include <qdebug.h>
#include <algorithm>
#include <functional>
using namespace std;

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton, &QPushButton::clicked, this, [=] {
      //  QMessageBox::information(this,"title","hello");
        CompareTest();
       
        //int abs_min = *max2c;
        //QMessageBox::warning(this, "title_abs_min", QString::number(abs_min));
        
    
});
    //严重性    代码    说明    项目    文件    行    禁止显示状态
    //错误    C2672    “std::invoke”: 未找到匹配的重载函数    QtWidgetsApplication1    D : \Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\xutility    238



}
void QtWidgetsApplication1::CompareTest()
{
    deque<int> ideq;
    ideq.insert(ideq.end(), -1);
    for (int i = 2; i <= 8; i++)
    {
        ideq.insert(ideq.end(), i);
    }
    for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)
    {
        qDebug() << "info:" << *iter;
        int number = *iter;
        QString msg = QString::number(number);
        //QMessageBox::information(this, "title", msg);

    }
    int min_value = *min_element(ideq.begin(), ideq.end());
    QMessageBox::warning(this, "title", QString::number(min_value));
    int max_value = *max_element(ideq.begin(), ideq.end());
    //QMessageBox::warning(this, "title", QString::number(max_value));

    deque<int>::iterator max2 = max_element(ideq.begin(), ideq.end());
    int max2a = *max2;
    //QMessageBox::warning(this, "title", QString::number(max2a));

    int max2c=*max_element(ideq.begin(), ideq.end(), AbsLess<int,int>()); //二元谓词
    QMessageBox::warning(this, "title", QString::number(max2c));
}
//绝对值最小值
bool QtWidgetsApplication1::absLess(int elem1, int elem2) //两个参数就是二元谓词
{
    return abs(elem1) < abs(elem2);
}

QtWidgetsApplication1::~QtWidgetsApplication1()
{}

 

posted @ 2024-12-27 23:39  txwtech  阅读(17)  评论(0)    收藏  举报