目录

  • 本文实现的效果
  • 软件版本
  • 编译
    • zlib
    • libpng
    • MathGL
    • 说明
  • 例1:心形
  • 例2:直方图
  • 参考资料

本文实现的效果

  1. 运用CMake、VS2019编译zlib、libpng、MathGL,得到静态链接库(debug & release,X64)

在这里插入图片描述

  1. 例1:基于Visual Studio 2019 IDE,运用MathGL和Qt绘制心形函数
    在这里插入图片描述3. 例2:基于Visual Studio 2019 IDE,由openCV读入图像,得到直方图数据,并由MathGL画出直方图,在Qt中显示。
    在这里插入图片描述

软件版本

  • CMake-3.18.0-rc3
  • zlib-1.2.11,源代码
  • libpng-1.6.37,源代码
  • MathGL-2.4.4,源代码
  • openCV-4.3.0
  • Qt-5.14.2
  • Visual Studio 2019-16.4.3,MSVC-19.24.28315.0
  • Qt Visual Studio Tools-2.5.2.1

编译

说明:MathGL依赖zlib和libpng,libpng依赖zlib。因此,按顺序编译zlib、libpng和MathGL。

zlib

  1. 打开CMake-gui

  2. 指定源码目录(1)和编译输出目录(2).
    在这里插入图片描述

  3. 单击Configure进行配置(3)。
    在这里插入图片描述
    (1) 选择合适的Visual Studio版本(4)
    (2) 选择计算机类型(5),本文均以x64平台为例。
    (3) 结束配置Finish(6),会提示“Configuring done”,结果如下图。
    在这里插入图片描述

  4. 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。

  5. 在(2)所示的输出目录中找到zlib.sln,双击在Visual Studio 2019中打开。

  6. 先生成debug版的静态链接库。

    (1)确认解决方案为debug、X64平台。
    在这里插入图片描述

    (2) 在zlibstatic项目上右击–>生成
    在这里插入图片描述

    (3) Visual Studio 2019的输出窗口会提示生成成功,并给出静态链接库的位置。
    在这里插入图片描述
    (4) 这样,zlib的debug、X64版的静态链接库已经编译成功。为了方便使用,可以将所有的静态链接库和头文件拷贝至统一位置。本文采用的zlib的1.2.11版的源文件中没有include文件夹,头文件直接在根
    (5) 需要注意的是,cmake在configure时会把头文件zlib.h的名字改为zlib.h.include。编译成功后,需要将它改回来。

  7. 再生成release版的静态链接库,只需将编译平台配置为Release、X64,其它步骤相同。
    在这里插入图片描述

  8. CMake的File菜单下有Delete Cache选项,可以清除缓存。清楚缓存后,单击Configure就会弹出选择编译器版本的对话框。

在这里插入图片描述

libpng

  1. 打开CMake-gui,选择源码目录和输出目录,单击Configure进行配置。

  2. 报错,大意为找不到zlib的链接库。单击OK接受这个错误。

在这里插入图片描述
3. 确保勾选Advanced,手动指定ZLIB_INCLUDE_DIR目录和ZLIB_LIBRARY_DEBUG、ZLIB_LIBRARY_RELEASE静态链接库。再Configure,这样就OK了。

在这里插入图片描述4. 单击Generate,生成Visual Studio 2019的*.sln项目。单击Open Project即可打开。
在这里插入图片描述
5. 在Visual Studio 2019中分别以Debug和Release方式编译png_static项目。
6. 可以发现,zlib和libpng的debug静态链接库都要比release版的更大。

MathGL

现在可以编译MathGL,需要依赖zlib、libpng、Qt的头文件及静态链接库。

  1. 打开CMake-gui,选择源码目录和输出目录,单击Configure进行配置。

  2. 报错,无非就是找不到zlib、libpng的头文件和静态链接库,我们手动指定就好。
    在这里插入图片描述
    修改后(在我的计算机中,第一次configure只能找到ZLIB_xxx_xxx的项目,再configure才能找到PNG_xxx_xxx的项目)
    在这里插入图片描述
    在这里插入图片描述

  3. 搜索qt,勾选enable-qt-5的选项,Configure
    在这里插入图片描述

  4. 继续报错,这次是找不到qt的目录。
    在这里插入图片描述
    (1) 手动指定目录,具体路径见图,修改后:
    在这里插入图片描述
    (2) 需要注意Qt匹配的编译器,这里选择的是msvc2017_64文件夹下的。
    (3) 这里有个小坑(虽然这个坑还没有坑我):在CMake中指定的是msvc2017_64文件夹中的路径,意味着这些lib是匹配msvc2017的;而在接下来的编译中,采用的是visual studio 2019,即msvc2019。还要说明另一件事,我给visual studio 2019安装了2017版的工具集,这可能是一种解决方案?或者根本就直接用Visual Studio 2017,别用太新的Visual Studio。

  5. Generate生成*.sln项目文件。忽略这两个不太严重的警告。
    在这里插入图片描述

  6. 打开MathGL2.sln项目文件。编译mgl-static和mgl-qt5-static项目,分别以Debug和Release的形式。

    (1) MathGL的Debug版和Release版的静态链接库的名字是一致的,我们可以给Debug版的静态链接库的名字加个’d’,便于区分。在属性-->常规-->目标文件名处可以修改。

    (2) 生成mgl-static时,我这里出现了一个error

    C:\open\lpng-1.6.37\png.h(330,13): fatal error C1083: 无法打开包括文件: “pnglibconf.h”: No such file or directory
    

    找到C:\open\lpng-1.6.37\png.h(330,13),贴心地提示了一句,我们按它说的去做即可。

    #ifndef PNGLCONF_H
    /* If pnglibconf.h is missing, you can* copy scripts/pnglibconf.h.prebuilt to pnglibconf.h*/
    #   include "pnglibconf.h"
    #endif
    

    (3) MathGL生成的静态链接库的路径比较奇怪,可以Visual Studio 2019输出窗口这一行的提示去找。

    在这里插入图片描述

  7. 编译mgl和mgl-qt5项目可以得到动态链接库。但会出问题,暂时没有深究。

  8. 在CMake的输出目录下的include/mgl2下可以看到三个*.h头文件,将其复制到源文件的include/mgl2目录下。

说明

至此,zlib、libpng和MathGL已经编译完毕,做几点说明。

  • 这是我最顺利的一次编译~
  • 以前为了编译这三个静态链接库,查遍网络,有很多提示是指定预编译头的,但是这里统统没有用上~
  • 在编译MathGL时,遇到的最奇怪的问题时,Visual Studio在生成时提示需要GNU compiler,稀里糊涂就消失了~

例1:心形

目标:MathGL+Qt绘制心形。

  1. 在Visual Studio 2019中创建Qt项目。

    (1) 在Visual Studio 2019中添加Qt插件,配置Qt开发环境(可百度)。

    (2) 选择项目类型:Qt Widgets Application

    在这里插入图片描述

    (3) 指定项目名称、项目位置。

    在这里插入图片描述

    (4) 配置Qt,需要选择X64平台的(因为前面编译的静态链接库是X64平台的)

    在这里插入图片描述

    (5) 文件名可以自行修改。

    在这里插入图片描述

  2. 在Visual Studio 2019中配置包含目录、库目录、附加依赖项。需要分别配置Debug和Release。Debug只能使用Debug的静态链接库,Release只能使用Release的静态链接库。

    (1) 包含目录(Debug)

    在解决方案管理器中的项目名称Heart上右击,选择属性。按下图操作。 在这里插入图片描述

    (2) 库目录(Debug)
    在这里插入图片描述

    (3) 附加依赖项(Debug)
    在这里插入图片描述

    (4) Release与Debug的内容基本一致,需要在库目录中给定Release的zlib、libpng、MathGL静态链接库的路径。

    (5) 配置过程还是比较复杂的,可以将Visual Studio 2019的配置保存到属性表,以便今后使用,具体方法请百度。

  3. 代码

    简便起见,我们直接写在main.cpp中。

    #include "MainWindow.h"
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QMainWindow>
    #include <mgl2/mgl.h>
    #include <mgl2/qmathgl.h>int heart(mglGraph * gr)
    {gr->Title("Heart");gr->SetOrigin(0,0); // 原点gr->SetRanges(-3.5, 2, -3, 3); // 坐标轴范围gr->Axis(); // 开启坐标轴gr->Grid(); // 开启坐标网格gr->FPlot("2*cos(6.28*t)-cos(6.28*2*t)", "2*sin(6.28*t)-sin(6.28*2*t)", "0", "r2"); // 绘图,函数FPlot绘制参数t在0到1时的参数方程。return 0;
    }int main(int argc, char *argv[])
    {QApplication a(argc, argv);QMainWindow* win = new QMainWindow();win->resize(800, 600);win->setWindowTitle("MathGL-Heart");QMathGL* qmgl = new QMathGL(win);qmgl->setDraw(heart);qmgl->update();win->show();return a.exec();
    }
    
  4. 以Debug或Release方式运行,会出现很多问题,我们逐一解决。

    (1) 预处理命令问题,表现为:

    LNK2038	检测到“_CRT_STDIO_ISO_WIDE_SPECIFIERS”的不匹配项: 值“1”不匹配值“0”(MainWindow.obj 中)	Heart	G:\008_Practice\005_PracticeCPP\20200713_MathGL-Qt-openCV\Heart\Heart\mgl-qt5-static.lib(mocs_compilation.obj)
    

    解决:进入项目的属性页面,修改预处理命令(Debug和Release分别修改),如下图。在这里插入图片描述

    (2) Qt链接库问题,表现为:

    LNK2019	无法解析的外部符号 "__declspec(dllimport) public: __cdecl QPrinter::QPrinter(enum QPrinter::PrinterMode)" (__imp_??0QPrinter@@QEAA@W4PrinterMode@0@@Z),该符号在函数 "public: void __cdecl QMathGL::print(void)" (?print@QMathGL@@QEAAXXZ) 中被引用	Heart	G:\008_Practice\005_PracticeCPP\20200713_MathGL-Qt-openCV\Heart\Heart\mgl-qt5-static.lib(qt.obj)
    LNK2001	无法解析的外部符号 "public: virtual void __cdecl QPrinter::setPageSizeMM(class QSizeF const &)" (?setPageSizeMM@QPrinter@@UEAAXAEBVQSizeF@@@Z)	Heart	G:\008_Practice\005_PracticeCPP\20200713_MathGL-Qt-openCV\Heart\Heart\mgl-qt5-static.lib(qt.obj)
    

    解决:(Debug和Release分别修改)

    (aa) 属性页面–>包含目录添加:

    C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtPrintSupport
    

    (bb) 属性页面–>库目录添加:

    C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib
    

    (cc) 属性页面–>附加依赖项添加:

    Qt5PrintSupportd.lib
    

    (3) 到这一步,Release已经可以了,但Debug还有一些问题。见下一点。

  5. 在以Debug方式运行时,遇到了玄学问题,如实记录。

    (1) 描述:Visual Studio 2019 提示有两个无法解析的符号

    1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl mglGraph::Title(char const *,char const *,double)" (__imp_?Title@mglGraph@@QEAAXPEBD0N@Z),该符号在函数 "int __cdecl heart(class mglGraph *)" (?heart@@YAHPEAVmglGraph@@@Z) 中被引用
    1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl QMathGL::setDraw(int (__cdecl*)(class mglGraph *))" (__imp_?setDraw@QMathGL@@QEAAXP6AHPEAVmglGraph@@@Z@Z),该符号在函数 main 中被引用
    1>G:\008_Practice\005_PracticeCPP\20200713_MathGL-Qt-openCV\Heart\x64\Debug\Heart.exe : fatal error LNK1120: 2 个无法解析的外部命令
    

    (2) 分析:

    这两个符号分别是int heart(mglGraph * gr)函数中用到的gr->Title("Heart");以及int main(int argc, char *argv[])中用到的qmgl->setDraw(heart);。按道理来说,这两个函数TitlesetDraw应该是在静态链接库mgl-static.libmgl-qt5-static.lib中定义的。

    可以很容易找到Title的头文件mgl.h,该头文件中同时定义了SetOriginSetRangesAxisGridFPlot等函数,这些函数都在int heart(mglGraph * gr)中调用过,都没有问题。

    可以很容易找到setDraw的头文件qmathgl.h,该头文件中同时定义了updateshow等函数,这些函数都在int main(int argc, char *argv[])中调用过,都没有问题。

    (3) 稀里糊涂地解决

    找到Title的函数定义,在mgl.h中,显然我们现在用的是第一种重载类型。

    /// Add title for current subplot/inplot
    /** Style '#' draw box around the title. */
    inline 	void Title(const char *title,const char *stl="",double size=-2)
    {mgl_title(gr,title,stl,size);
    }
    /// Add title for current subplot/inplot
    /** Style '#' draw box around the title. */
    inline 	void Title(const wchar_t *title,const char *stl="",double size=-2){mgl_titlew(gr,title,stl,size);
    }
    

    其中,mgl_title定义在canvas_cf.h中的。我们这样修改程序:

    // 在main.cpp中再包含头文件
    #include <mgl2/canvas_cf.h>// 在int heart(mglGraph * gr)中
    // 将gr->Title("Heart");替换为
    mgl_title((HMGL)gr, "Heart", "", -2);
    

    找到setDraw的头文件qmathgl.h,定义为:

    inline void setDraw(int (*func)(mglGraph *gr))
    {setDraw(func?mgl_draw_graph:0,(void*)func);
    }
    

    其中,函数中调用的setDraw仍然定义再qmathgl.h中,mgl_draw_graph声明在wnd.h中。我们这样修改程序:

    // 在main.cpp中再包含头文件
    #include <mgl2/wnd.h>// 在int main(int argc, char *argv[])中
    // 将qmgl->setDraw(heart);替换为
    qmgl->setDraw(mgl_draw_graph, (void *)heart);
    

    (4) 此时此刻,Debug调试,问题解决。而且,将刚刚include的两个头文件注释掉,并恢复TitlesetDraw为原来的调用方式,仍然没有问题。就很奇怪( ╯□╰ )

    (5) 正确地解决

    添加预处理命令:MGL_STATIC_DEFINE,这个命令说明我们给的lib是静态链接库。

  6. 我们可以很OK地画出一个心形啦!好丑,但就是这个意思 φ(゜▽゜)♪*
    在这里插入图片描述

  7. 配置总结

    (1) 包含目录:

    【MathGL】C:\open\mathgl-2.4.4\include
    【Qt】C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtPrintSupport
    

    (2) 库目录【Debug】(我把所有自己编译的*.lib都放到一个文件夹了):

    C:\open\lib_Debug_X64
    C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib
    

    (3) 库目录【Release】(我把所有自己编译的*.lib都放到一个文件夹了):

    C:\open\lib_Release_X64
    C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib
    

    (4) 预处理器定义

    _CRT_STDIO_ISO_WIDE_SPECIFIERS
    MGL_STATIC_DEFINE 
    

    (5) 附加依赖项【Debug】

    mgl-qt5-static-d.lib
    mgl-static-d.lib
    Qt5PrintSupportd.lib
    libpng16_staticd.lib
    zlib-staticd.lib
    

    (6) 附加依赖项【Release】

    zlibstatic.lib
    libpng16_static.lib
    mgl-static.lib
    mgl-qt5-static.lib
    Qt5PrintSupport.lib
    

例2:直方图

  1. 在Visual Studio 2019中创建Qt项目,并配置。

    (1) MathGL、Qt、zlib、libpng的配置与例1相同。
    (2) 还需要对openCV进行配置(详见百度)。主要包括指定openCV的include目录、lib目录、附加依赖项,并将openCV的*.dll文件拷贝至正确位置。

  2. 在Qt Designer中进行可视化窗口设计:1个Widget区域,2个Push Button。 在这里插入图片描述
    采用uic命令将*.ui文件编译为*.h文件,并导入至Visual Studio 2019项目。

  3. 代码

    // main.cpp#include "MainWindow.h"
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QMainWindow>int main(int argc, char* argv[])
    {QApplication a(argc, argv);MainWindow w;w.setWindowTitle("openCV-MathGL-Qt");w.show();return a.exec();
    }
    // MainWindow.h#pragma once#include <QtWidgets/QMainWindow>
    #include "ui_MainWindow.h"
    #include <mgl2/mgl.h>
    #include <mgl2/qmathgl.h>class MainWindow : public QMainWindow
    {Q_OBJECTpublic:MainWindow(QWidget *parent = Q_NULLPTR);~MainWindow();Ui::MainWindowClass ui;private:QString imagename;QMathGL* QMGL;  // 定义一个QMathGL对象private slots: //槽函数void on_pushButton_open_clicked();void on_pushButton_hist_clicked();public: // 静态变量、函数static double* d_hist;static int drawHist(mglGraph* gr);
    };
    
    // MainWindow.cpp#include "MainWindow.h"
    #include <QDir>
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QScrollArea>
    #include <QFileDialog>
    #include "ui_MainWindow.h"
    #include <opencv2/opencv.hpp>
    #include <string>
    #include <mgl2/qmathgl.h>
    #include <mgl2/data.h>double* MainWindow::d_hist = NULL;// 构造函数
    MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
    {ui.setupUi(this);QMGL = new QMathGL(ui.widget_main); 
    }// 析构函数
    MainWindow::~MainWindow()
    {delete this->QMGL;
    }// static 绘图函数
    int MainWindow::drawHist(mglGraph* gr)
    {mglData y{ 256, d_hist }; // MathGL 专有的数据类型y.Norm((mreal)0,(mreal)1); // 归一化gr->SetRanges(0, 255, 0, 1); // 坐标范围gr->Axis(); // 坐标轴mglDataA* yA;yA = &y;gr->Bars(*yA);return 0;
    }// 选择文件
    void MainWindow::on_pushButton_open_clicked()
    {// 选择单个文件QString curPath = QDir::currentPath();QString dlgTitle = "选择一张图片:";QString filter = "Image(*.jpg)";QString aFileName = QFileDialog::getOpenFileName((QWidget*)this, dlgTitle, curPath, filter);if (!aFileName.isEmpty()){this->imagename = aFileName;this->ui.lineEdit_image->setText(imagename);}
    }// 直方图
    void MainWindow::on_pushButton_hist_clicked()
    {if (this->imagename.isEmpty()){return;}cv::Mat image = cv::imread((this->imagename).toStdString());int channels = 1;int histsize = 256;float range[] = { 0,255 };const float* histRanges = { range };cv::Mat mHist;cv::calcHist(&image, 1, &channels, cv::Mat(), mHist, 1, &histsize, &histRanges, true, false);d_hist = new double[256];for (int i = 0; i < 256; ++i){d_hist[i] = mHist.at<float>(i);}// 绘图this->QMGL->setDraw(drawHist);this->QMGL->adjust();this->QMGL->setZoom(true);this->QMGL->setRotate(true);this->QMGL->update();
    }
    
  4. 结果

    在这里插入图片描述

    在这里插入图片描述

  5. 验证

    以Lena图为例,本程序绘制的直方图与ImageJ相同。以下为ImageJ的结果。

    在这里插入图片描述

参考资料

  1. https://blog.csdn.net/vaincury/article/details/107248421
  2. https://blog.csdn.net/vaincury/article/details/105438971
  3. https://www.bilibili.com/video/BV11C4y1s7Jp?from=search&seid=7524128681462799090
  4. https://www.bilibili.com/video/BV1yQ4y1K79n?from=search&seid=7524128681462799090
  5. https://www.bilibili.com/video/BV1q4411r7tM?from=search&seid=7524128681462799090
欢迎交流
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. centos安装nginx

    nginx包官网自行下载 由于nginx是c++开发需要安装nginx依赖,pcre,openssl,gcc,zlib yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel解压nginx软件包tar -xvf nginx-1.18.0.tar.gz进入解压之后的目录nginx-1.18.0cd nginx-1.18.0命令行执行./configure命…...

    2024/4/28 9:01:05
  2. zzuli_oj-python-1005: 整数幂

    1005: 整数幂 时间限制: 1 Sec 内存限制: 30 MB 提交: 55560 解决: 23275 [状态] [讨论版] [提交] [命题人:admin] 题目描述 输入3个整数,输出它们的1次幂、2次幂和3次幂。 输入 输入3整数,用空格隔开。 输出 输出3行,每行3个整数,分别是它们的1次幂、2次幂和3次幂,每个…...

    2024/4/27 21:39:56
  3. 深度学习-梯度下降优化

    小批量下降(mini-batch) 将样本划分为较小样本集批次进行下降梯度计算,可有效提升梯度下降的次数 fot t in range(1,5001):#前向传播#计算J = 1/m*sum(J(y_hat,y))#后向传播其中,m表示单批次中的样本数量 批量下降算法优化 为节省算力和加快学习效率,利用数学方法计算梯度…...

    2024/4/27 20:47:32
  4. pandas快速入门

    pandas 创建数据集对象 一维数组二维数组df.values: array([[ 1.18898298, -1.15011854, -0.70058776, 0.43906549], [-2.04154443, 1.08450747, -0.33544069, 1.96975377], [ 1.2041512 , -1.27771421, -0.23067059, 0.62906316], [-0.35235094, -1.70158492, -0.03429361…...

    2024/4/28 7:15:04
  5. 学习笔记 | extern的作用

    extern的作用extern可以置于变量或者函数前, extern标识的变量或函数声明定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 extern是C、C++语言中表明函数和全局变量作用范围的关键字。 对于extern变量来说,仅仅是一个变量的声明,其并不是定义,因为…...

    2024/4/28 5:35:17
  6. 列表相关的操作和函数

    列表的相关操作 (1)列表的拼接 (同元组) lst1 = [1,2,3] lst2 = [4,5,6,6] res = lst1 + lst2 # (2)列表的重复 (同元组) lst1 = [1,2,3] res = lst1 * 3 # (3)列表的切片 (同元组) # 语法 => 列表[::] 完整格式:[开始索引:结束索引:间隔值]# (1)[开始…...

    2024/4/28 11:47:22
  7. 微信公众号菜单跳小程序 提示页面不存在的解决办法

    今天在微信公众号添加了菜单准备跳转到小程序的。 显示获取了我要跳转的页面路径 “pages/orderList/orderList.html?sts=0” 然后在公众号菜单里直接加入,结果测试跳转的时候提示“页面不存在”检查,然后再网上搜索了问题都没解决的情况下。 修改方式: 如果你跳转到小程序…...

    2024/4/28 12:31:20
  8. 关于Unity打WebGL包的一点点坑————读取本地文件不了

    最近使用Unity打webGl包,碰到一个贼坑贼坑的问题。数据读取不出来,导致程序后面直接运行崩溃。我以为是浏览器的内存的问题。知道今天,才发现贼坑。WebGL是不能通过File.ReadAllLines(path, Encoding.Default); 还有 www形式加载本地文件的。 解决方案: 用个string类型接收…...

    2024/4/28 1:27:37
  9. CS231n-Lecture2:图像分类(Image Classification)

    图像分类最近邻分类器(Nearest Neighbor Classifier / NN)概念实现过程K-最近邻算法(K-nearest neighbor / kNN)超参数的选择(hyperparameter)交叉验证kNN优缺点reference 最近邻分类器(Nearest Neighbor Classifier / NN) 概念图像分类数据集CIFAR-10:60,000 张图,训…...

    2024/4/28 1:59:10
  10. 数据可视化:下载数据

    数据可从https://www.ituring.com.cn/book/1861下载绘制气温图表Step 1:绘制基本图形Step 2:优化图形制作交易收盘走势图:JSON格式 绘制气温图表 Step 1:绘制基本图形 # csv模块用于分析csv文件中的数据行 import csv from matplotlib import pyplot as plt# 从文件中获取最…...

    2024/4/9 19:28:45
  11. 一天一大 leet(三角形最小路径和)难度:中等-Day20200714

    题目: 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。 例如,给定三角形: [[2],[3,4],[6,5,7],[4,1,8,3] ]自顶向下的最小路径和为 11(即…...

    2024/4/28 10:38:35
  12. http权威教程

    1 web基础请求报文响应报文五个层 应用层 传输层 网络层 链路层 硬件层urlurl 是URI的一个子集 url组成 协议 域名 资源路径...

    2024/4/28 4:48:37
  13. 1-01 Docker介绍

    目录1、什么是 Docker?什么是LXC2、为什么是Docker?更快速的交付和部署更高效的虚拟化更轻松的迁移和扩展更简单的管理3、虚拟化和容器化对比什么是容器化什么是虚拟化容器化和虚拟化对比那么该如何选择呢?1、什么是 Docker?Docker 是一个开源项目,诞生于 2013 年初,最初…...

    2024/4/28 7:01:46
  14. ES6 Symbol

    ES5的对象属性名都是字符串,这容易造成属性名的冲突。 ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。 Symbol 值通过…...

    2024/4/28 18:30:38
  15. 每日日一题---07

    150. 逆波兰表达式求值难度中等162收藏分享切换为英文关注反馈根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有…...

    2024/4/28 14:18:47
  16. python3.5 win10 64位 pyHook pythoncom安装总结(截止到2020-07-14有效)

    1. pyHookhttps://download.lfd.uci.edu/pythonlibs/w3jqiv8s/cp35/pyHook-1.5.1-cp35-cp35m-win_amd64.whl用QQ浏览器不行,出现以下提示。没有研究原因。改用Edge下载成功。其他浏览器没有尝试,未知。2.pythoncompip3 install pypiwin32安装成功后,测试代码如下:import py…...

    2024/4/28 6:00:28
  17. 自创的安卓代码生成器-生成Activity类和布局文件

    大家好,我是飞刀,这次我来讲一下生成Activity类和布局的功能。首先打开界面看一下:除了主输入框,还有包名,创建者,创建日期,项目主模块路径,文件是否写入工程。这里的默认值就是配置文件里面的值,日期默认是当前的日期。这些参数也可以临时修改生效,但是要注意下次打…...

    2024/4/9 19:28:38
  18. A - 数列下标 (暴力遍历) (牛客算法周周练15)

    传送门 题意: 需要输出数组a中每一个a[i]右侧第一个比a[i]大的下标。思路: 原本还以为需要用个单调队列什么的,后来发现其实可以两重循环暴力。最坏都不到1e8的复杂度。 代码实现: #include<bits/stdc++.h> #define endl \n #define null NULL #define ll long long …...

    2024/4/22 16:05:20
  19. A - 数列下标牛客算法周周练15

    传送门 题意: 需要输出数组a中每一个a[i]右侧第一个比a[i]大的下标。思路: 原本还以为需要用个单调队列什么的,后来发现其实可以两重循环暴力。最坏都不到1e8的复杂度。 代码实现: #include<bits/stdc++.h> #define endl \n #define null NULL #define ll long long …...

    2024/4/21 1:47:07
  20. 2020牛客暑期多校训练营

    I 1 or 2 带花树算法的应用。 主要对于带花树算法进行了了解,对缩环的操作的理论证明看了很多资料(现在想想其实可以带过的)。 但是对于这一题的具体做法不是很了解,觉得挺抽象的(大佬都只贴一个代码),在使用带花树算法前的处理不是很清楚。直到彭磊大佬的博客讲解贴出来…...

    2024/4/9 18:43:32

最新文章

  1. 外面收费999元的虚拟小众产品,0门槛,单号100-300元

    近日&#xff0c;我抽出时间参加了一些线下聚会&#xff0c;与互联网行业的朋友们进行了面对面的交流。有时候&#xff0c;独自努力不如与他人分享想法&#xff0c;因为别人的建议可能会让你豁然开朗&#xff0c;解决遇到的难题。在互联网行业中&#xff0c;交流和沟通至关重要…...

    2024/4/28 23:15:02
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 第十二届蓝桥杯省赛真题(C/C++大学B组)

    目录 #A 空间 #B 卡片 #C 直线 #D 货物摆放 #E 路径 #F 时间显示 #G 砝码称重 #H 杨辉三角形 #I 双向排序 #J 括号序列 #A 空间 #include <bits/stdc.h> using namespace std;int main() {cout<<256 * 1024 * 1024 / 4<<endl;return 0; } #B 卡片…...

    2024/4/28 0:30:06
  4. 论文阅读AI工具链

    文献检索 可以利用智谱清言来生成合适的文献检索式&#xff0c;并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时&#xff0c;您可以使用类似的逻辑来构建您的搜索式&#xff0c;但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索&#xff0c;但是…...

    2024/4/28 2:14:55
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/28 4:04:40
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/28 12:01:04
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/4/28 16:34:55
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/4/28 18:31:47
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/4/28 12:01:03
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/28 12:01:03
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/4/28 12:01:03
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/28 16:07:14
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/4/27 21:08:20
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/28 9:00:42
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/27 18:40:35
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/28 4:14:21
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/27 13:52:15
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/4/27 13:38:13
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/4/28 12:00:58
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/4/28 12:00:58
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/4/27 22:51:49
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/4/28 7:31:46
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/4/28 8:32:05
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/27 20:28:35
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57