c++ find, find_if, find_if_not

需求 cpp 了解 find 相关函数 解决 find 的语法格式 InputIterator find (InputIterator first, InputIterator last, const T& val); //find() 函数作用于普通数组 char stl[] ="http://c.biancheng.net/stl/"; //调用 find() 查找第一个字符 'c' char * p = find(stl, stl + strlen(stl), 'c'); //判断是否查找成功 if (p != stl + strlen(stl)) { cout << p << endl; } //find() 函数作用于容器 std::vector<int> myvector{ 10,20,30,40,50 }; std::vector<int>::iterator it; it = find(myvector.begin(), myvector.end(), 30); if (it != myvector.end()) cout << "查找成功:" << *it; else cout << "查找失败"; find_if 可以指定查找规则。语法: InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred); //自定义一元谓词函数 bool mycomp(int i) { return ((i % 2) == 1); } //以函数对象的形式定义一个 find_if() 函数的查找规则 class mycomp2 { public: bool operator()(const int& i) { return ((i % 2) == 1); } }; int main() { vector<int> myvector{ 4,2,3,1,5 }; //调用 find_if() 函数,并以 IsOdd() 一元谓词函数作为查找规则 vector<int>::iterator it = find_if(myvector....

2023-10-31 · 1 min · 198 words · RamLife

c++ 重载运算符 <

需求 cpp 需要对 array 中的对象进行排列,使用 sort 的情况下,默认需要重载 <, 才能实现相关功能。 解决 选择的是,在结构体内部进行重载。 struct PatientDataHead { // increment id int32_t id; bool operator <(const PatientDataHead& head) const {return id < head.id;} }; std::array<PatientDataHead, kPatientNum> patient_data_heads_ {}; std::sort(patient_data_heads_.begin(), patient_data_heads_.end()); 参考 C++中自定义比较函数和重载运算符总结

2023-10-31 · 1 min · 38 words · RamLife

c++ 容器的 insert, emplace, erase, clear

需求 cpp 对容器的插入和删除操作 解决 insert & emplace insert 插入时,会先调用构造函数,再调用移动构造函数。 emplace 插入时,只调用构造函数。 emplace 直接在容器的指定位置调用构造函数,省略了移动构造函数,效率会更高一些,推荐使用 emplace. erase erase 一般是需要先获取迭代器,然后再删除。 vector<int>::iterator it; it = myvector.begin(); myvector.erase(it); // finding the position of the element in the vector int valueToBeDeleted = 3; auto it = find(vector.begin(), vector.end(), valueToBeDeleted); if (it != vector.end()) { vector.erase(it); } vector<int>::iterator it1, it2; it1 = myvector.begin(); it2 = myvector.end(); it2--; it2--; myvector.erase(it1, it2); clear 直接清空所有元素 参考 C++ STL vector插入元素(insert()和emplace())详解 vector erase() and clear() in C++

2023-10-29 · 1 min · 75 words · RamLife

stm32 cube ide 寄存器变量监控

需求 调试的时候,有时候会比较在意某个寄存器到底是什么时候被修改? 解决 这个其实可以参照 eclipse 正常的变量监控的方法去做。 找到寄存器对应的结构体变量,比如说我需要监视 uart1 的 TCIE 在 DMA 发送的时候,是什么时候被置位的。我就可以先找到 uart1 对应的结构体变量 huart1. 添加变量监控。 在 右侧的 expressions 中添加 huart1 添加断点。 在 huart1 -> instance -> CR1 上面右键,点击 add watch point 就可以新增一个监视这个寄存器的断点了。 参考 Eclipse开启变量监控 STM32CubeIDE查看变量 STM32 CubeIDE 仿真时怎样把变量添加到监视窗口。 记一次STM32中HardFault问题的调试解决(INVPC, LR 0xFFFFFFF5) STM32CubeIDE使用总结(三)——debug调试程序 关于STM32CubeIDE环境下的变量显示及监测 用Keil仿真调试查看变量内存地址被篡改的方法 keil debug时用断点管理抓取变量变化 eclipse中debug改变变量的值

2023-10-25 · 1 min · 49 words · RamLife

找到占用端口的进程

需求 调试时候,会碰到有些软件占用了特定的端口号,需要找出来并结束掉。 解决 查端口号获取 pid Netstat –ano | findstr “<端口号>” 最后一列为端口对应的 pid. 通过 pid 找进程 命令找进程 tasklist | findstr “<PID号>” 任务管理器找进程 任务管理器中点击 Details 标签页,然后在 PID 那一栏找到相关进程 参考 windows netstat 查看端口、进程占用 windows查看某个端口占用情况 Windows下如何查看某个端口被谁占用

2023-10-25 · 1 min · 32 words · RamLife

mdk compiler version 5

需求 新版本的 mdk 默认安装 v6 编译器,旧工程依赖 v5 编译器无法编译,需要解决。 解决 下载 v5 编译器 官网基本很难下载 第三方 csdn 下载 网盘 https://pan.baidu.com/s/1EgzGFCL7VflL9r6iJNj0sQ?pwd=5rhc 安装 安装可以和 mdk 安装到一起去,也可以安装到其他地方。 配置 点击魔棒右边的 file extensions. folder 标签 -> use arm compiler 右边的 … add compiler 选择你上一步安装的位置 close 使用 点击魔棒 target 标签 -> arm compiler 下拉,选择 v5.06… 参考 《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂) Keil5遇到:*** Target ‘xxx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available. KEIL MDK5.37版本自行添加AC5(ARMCC)编译器

2023-10-23 · 1 min · 68 words · RamLife

STM32CubeIDE 使用 dap 通过 openocd 调试

需求 最近使用 stm32u575 芯片的时候,调试时发现很尴尬的问题, jlink 必须安装高版本,然后盗版的就不能用了。MDK 可以直接使用 DAPLink,但是 stm32cubeide 不能直接支持。所以需要想办法解决这个问题。 解决 参考了网上的资料,st 自带的 openocd 不能用,端口不对。 openocd 需要下载官方的 openocd,不要使用 stm32cubeide 自带的。下载地址: https://gnutoolchains.com/arm-eabi/openocd/ 。下载后自行安装。 配置 openocd stm32cubeide 菜单栏 -> Run -> External Tools -> External Tools Configrations -> Program 右键 -> New Configration. Name 自己输入。 Location: 选择刚才下载的 openocd 中的 openocd.exe 所在路径。 Arguments: -f interface\cmsis-dap.cfg -f target\stm32u5x.cfg apply 然后 Run. 配置 debug Run -> Debug Configurations -> GDB Hardware Debugging 右键 -> New Configuratin....

2023-10-10 · 1 min · 184 words · RamLife

QT qml和c++交互方式介绍

需求 qt 中 qml 和 c++ 中的类如何进行交互 解决 c++ 类注册到元对象系统 通过使用上下文属性,可以将C++对象嵌入到QML环境中。上下文属性适用于简单的应用程序。它们将您的对象导出为全局对象。在QML引擎实例化之后,上下文被暴露给QML环境。 调用函数 QQmlApplicationEngine engine; QmlCpp qmlcpp; // 先初始化一个类的实例 qmlcpp.setValue(898); // 设初值 // 将这个 C++ 实例注册到 Qml 引擎上下文中标示为 “qmlpro” 的名字, 这样 Qml 中就可以通过 qmlpro 来访问这个 C++ 实例。 engine.rootContext()->setContextProperty("qmlpro",&qmlcpp); class QmlCpp : public QObject { Q_OBJECT public: explicit QmlCpp(QObject *parent = nullptr); // Q_INVOKABLE: // Apply this macro to declarations of member functions to allow them to be invoked via the meta-object system....

2023-10-09 · 4 min · 775 words · RamLife

QT property 介绍

需求 qt 中 property 和 Q_PROPERTY 如何使用? 解决 qml 在 qml 中使用 property 来定义一个对象的属性。具体语法如下: [default] [required] [readonly] property <propertyType> <propertyName> 特性 类似于成员变量,不同的是可以初始化,并且没有public、private、 protected等限制。 可以使用 onXXXChnaged 作为这个属性的信号处理函数. property string someText onSomeTextChanged: console.log("The someText will be: " + someText) properName以一个小写字母开头,只能包括字母、数字和下划线。 propertyType可以是QML基本类型,enumeration以int来代替,也可以是QML对象类型,神奇的var类型是泛型的,支持任何类型的属性值. Item { property int theNumber property string theString property url theUrl property Item someItem property Rectangle someRectangle property var someNumber: 1.5 property var someString: "abc" property var someBool: true property var someList: [1, 2, "three", "four"] property var someObject: Rectangle { width: 100; height: 100; color: "red" } } 属性值可以被初始化,也可以使用JavaScript表达式来赋值,通过这两种方式赋值时,可以是一个静态值,也可以是一个与其它属性绑定的值。 Rectangle { id: rootRect property color theColor: "green" property color previousColor: rootRect....

2023-10-07 · 3 min · 497 words · RamLife

QT 连接 mysql 报错,找不到驱动

需求 使用 qt 连接 mysql 时报错,提示 QSqlDatabase: QMYSQL driver not loaded。 解决 qt 连接 mysql 的通道从上向下: qt 程序 qt 数据库插件即: qsqlmysql.dll 和 qsqlmysqld.dll mysql 库: libmysql.dll mysql 可执行文件: mysql.exe 检查是否有 qt 数据库插件 这种一般报错就是: QSqlDatabase: QMYSQL driver not loaded QStringList drivers = QSqlDatabase::drivers(); //获取现在可用的数据库驱动 foreach(QString driver, drivers) { qDebug() << driver; } 查看输入里面有没有 "QMYSQL", 如果没有,就需要按照 qt 官网的方法编译一个出来。 检查 mysql 库 这种一般的报错就是连接不上。 编译调试的时候,一般可以自动找到 libmysql.dll, 但是 release 的时候,就会缺少这个了。需要从 mysql 的安装目录下面的 lib 文件夹中,把这个库复制到 release 之后的文件夹内。...

2023-10-02 · 1 min · 137 words · RamLife