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++

<span title='2023-10-29 11:27:00 +0800 CST'>2023-10-29</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;75 words&nbsp;·&nbsp;RamLife

stm32 cube ide 寄存器变量监控

需求 调试的时候,有时候会比较在意某个寄存器到底是什么时候被修改? 解决 这个其实可以参照 eclipse 正常的变量监控的方法去做。 找到寄存器对应的结构体变量,比如说我需要监视 uart1 的 TCIE 在 DMA 发送的时候,是什么时候被置位的。我就可以先找到 uart1 对应的结构体变量 huart1. 添加变量监控。 在 右侧的 expressions 中添加 huart1 添加断点。 在 huart1 -> instance -> CR1 上面右键,点击 add watch point 就可以新增一个监视这个寄存器的断点了。 参考 Eclipse开启变量监控

<span title='2023-10-25 18:19:00 +0800 CST'>2023-10-25</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;36 words&nbsp;·&nbsp;RamLife

找到占用端口的进程

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

<span title='2023-10-25 18:01:00 +0800 CST'>2023-10-25</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;30 words&nbsp;·&nbsp;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编译器官网下载、安装和使用说明(小白也能懂)

<span title='2023-10-23 18:11:00 +0800 CST'>2023-10-23</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;53 words&nbsp;·&nbsp;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....

<span title='2023-10-10 15:38:00 +0800 CST'>2023-10-10</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;168 words&nbsp;·&nbsp;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....

<span title='2023-10-09 15:42:00 +0800 CST'>2023-10-09</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;775 words&nbsp;·&nbsp;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....

<span title='2023-10-07 10:42:00 +0800 CST'>2023-10-07</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;497 words&nbsp;·&nbsp;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 之后的文件夹内。...

<span title='2023-10-02 10:18:00 +0800 CST'>2023-10-02</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;137 words&nbsp;·&nbsp;RamLife

mysql 在 windows 下安装

需求 需要在 windows10 64bit 平台按照 mysql,记录安装过程。 解决 当前环境是企业版 windows, administrator 账户安装 mysql 8.0.34.0. 安装基本都是下一步,只有几个地方需要注意一下。 安装 setup type 选择 full type and networking 根据需要来选择。如果当前是开发机器,那就 development, 如果还需要跑其他软件的服务器,那就 server, 如果不跑其他,单纯是 mysql 服务器, 那就 dedicated. authentication 建议选择 legacy,便于和旧的客户端软件兼容。 accounts and roles 设置密码 apply configuration 这边可能在 starting the server 的时候会出错。具体解决方法见下一节。 connect to server 输入密码,进行验证。 installation complete 可以把安装后就启动的两个钩去掉。 问题 Failed to start service MySQL80: A task may only be disposed if it is in a completion state 右键 my computer -> manage -> services -> 右键 mysql80 -> properties -> log on 标签, 查看 this account 到底是哪个账户,我这里是 Network Service....

<span title='2023-10-01 09:34:00 +0800 CST'>2023-10-01</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;147 words&nbsp;·&nbsp;RamLife

二叉树介绍

需求 了解二叉树 解决 是什么 从根节点开始,小的向左边放,大的向右边放,一层一层放下去。满足左小右大原则。 没有子节点的是叶子 子节点的个数是度 从根到当前节点的为一路径上节点总数是深度 从当前节点到最远叶子路径上的节点总数是高度 用处 用于大数据量时的反复的搜索和插入。 有序链表: 查找成本大 O(N), 插入成本小 O(1) 有序数组: 查找成本小 O(1), 插入成本大 O(N) 排序二叉树: 比较折中,查找时类似于二分查找 O(logN), 插入成本也小 O(logN). 打印 层序遍历 public int[] levelOrder(TreeNode root) { int arr[]=new int[10000]; int index=0; Queue<TreeNode>queue=new ArrayDeque<>(); if(root!=null) queue.add(root); while (!queue.isEmpty()){ TreeNode node=queue.poll(); arr[index++]= node.val; if(node.left!=null) queue.add(node.left); if(node.right!=null) queue.add(node.right); } return Arrays.copyOf(arr,index); } 分层存储 public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>>list=new ArrayList<List<Integer>>(); if(root==null)return list; Queue<TreeNode>q1=new ArrayDeque<TreeNode>(); q1.add(root); while (!...

<span title='2023-08-16 10:20:00 +0800 CST'>2023-08-16</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;565 words&nbsp;·&nbsp;RamLife