
C++
AllenSun-1990
上海先楫半导体资深FAE工程师,不定期更新HPMicro高性能MCU应用案例。
展开
-
QT:使用QDomDocument XML实现对配置参数的修改
本文章主要讲解了如何使用QDomDocument XML实现对XML配置参数的修改以及保存,从而可以使程序每次都加载最新的配置参数。原创 2023-01-12 11:26:11 · 1052 阅读 · 0 评论 -
基于epoll的socket编程总结
Ethernet消息的发送方是server,Ethernet消息的接收方是client。一个以太网节点,接受消息的时候是client。发送消息的时候是server。server需要listen socket。原创 2020-03-06 22:26:06 · 1737 阅读 · 0 评论 -
Algorithm:接雨水
算法:接雨水原创 2022-04-28 19:48:49 · 156 阅读 · 0 评论 -
C/C++:multiple definition和undefined reference
multiple definition一般是在.h头文件定义了变量和函数,解决方法:使用static或者将函数及变量定义在.c、.cpp文件中。undefined reference可能是函数定义的命名空间不对。如果函数在头文件命名空间中声明,源文件的实现部分也要加namespace命名空间(类的话不用加)#pragma once#include <string>#include <stdint.h>#include <dlt/dlt.h>na原创 2022-02-15 09:31:45 · 1338 阅读 · 0 评论 -
C/C++:使用宏定义程序段
例子:#define DLT_INITIALIZER(...) \do { \ dlt_with_session_id(1); \ dlt_with_timestamp(1); \ dlt_with_ecu_id(1); \ dlt_verbose_mode(); \ DLT_REGISTER_APP(DLT_LOG_APP_ID, "Test Application for Logging"); \ .原创 2022-02-15 09:22:11 · 1276 阅读 · 0 评论 -
OpenCV:使用VIZ模块进行三维显示
OpenCV:使用VIZ模块进行三维显示原创 2022-01-30 20:00:33 · 5577 阅读 · 0 评论 -
Algorithm:组合总和
给你一个 无重复元素 的整数数组candidates 和一个目标整数target,找出candidates中可以使数字和为目标数target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target 的不同组合数少于 150 个。原创 2022-01-02 20:50:31 · 467 阅读 · 0 评论 -
Algorithm:翻转字符串里的单词
给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。原创 2022-01-02 09:47:03 · 214 阅读 · 0 评论 -
Algorithm:外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。原创 2022-01-02 07:41:04 · 204 阅读 · 0 评论 -
Algorithm:解数独
编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。示例:输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8","...原创 2021-12-30 14:41:32 · 362 阅读 · 0 评论 -
Algorithm:有效的数独
请你判断一个9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用'.'表示。示例 1:输入:board =[["5","3",".",".","7",".",".","...原创 2021-12-26 23:05:12 · 108 阅读 · 0 评论 -
Algorithm:在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。进阶:你可以设计并实现时间复杂度为O(log n)的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:num...原创 2021-12-26 11:54:08 · 101 阅读 · 0 评论 -
Algorithm:搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一.原创 2021-12-26 09:41:45 · 85 阅读 · 0 评论 -
Algorithm:最长有效括号
给你一个只包含 '('和 ')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0提示:0 <= s.length <= 3 * 104s[i] 为 '(' 或 ')'来源:力扣(LeetCode)链接:https://leetcode-...原创 2021-12-25 19:27:40 · 250 阅读 · 0 评论 -
Algorithm:下一个排列
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输出:原创 2021-12-25 12:01:58 · 199 阅读 · 0 评论 -
Algorithm:两数相除
给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数dividend除以除数divisor得到的商。原创 2021-12-22 16:43:24 · 109 阅读 · 0 评论 -
Algorithm:实现 strStr()
实现strStr()函数。给你两个字符串haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回-1 。说明:当needle是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当needle是空字符串时我们应当返回 0 。这与 C 语言的strstr()以及 Java 的indexOf()定义相符。示例 1:输入:haystac...原创 2021-12-22 09:46:09 · 104 阅读 · 0 评论 -
Algorithm:K 个一组翻转链表
给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。原创 2021-12-22 08:59:53 · 70 阅读 · 0 评论 -
[C/C++] 断言和异常
assert: 断言assert() 会对表达式expression进行检测:如果expression的结果为 0(条件不成立),那么断言失败,表明程序出错,assert() 会向标准输出设备(一般是显示器)打印一条错误信息,并调用 abort() 函数终止程序的执行。 如果expression的结果为非 0(条件成立),那么断言成功,表明程序正确,assert() 不进行任何操作。try{} catch{} : 异常...原创 2021-05-09 08:16:50 · 553 阅读 · 0 评论 -
编程规范:命名和规则
开发命名规范原创 2021-12-16 10:18:10 · 142 阅读 · 0 评论 -
Algorithm:两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100/** * Definition for singly...原创 2021-11-13 12:33:38 · 94 阅读 · 0 评论 -
Algorithm:合并K个升序链表
/***给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:l...原创 2021-10-26 13:51:27 · 124 阅读 · 0 评论 -
Algorithm:括号生成
数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8class Solution {public: vector<string> genera...原创 2021-10-20 21:58:13 · 161 阅读 · 0 评论 -
Algorithm:合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序...原创 2021-10-11 23:16:35 · 113 阅读 · 0 评论 -
Algorithm: 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n &...原创 2021-10-10 19:15:41 · 101 阅读 · 0 评论 -
Algorithm:四数之和
给你一个由 n 个整数组成的数组nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]] :0 <= a, b, c, d< na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0,-1,0,-2,2], target = ...原创 2021-09-30 17:02:05 · 118 阅读 · 0 评论 -
C++:Windows端创建定时任务
#include <iostream>#include <ctime>#include <unistd.h>using namespace std;/*** * struct tm { int tm_sec; // 秒,正常范围从 0 到 59,但允许至 61 int tm_min; // 分,范围从 0 到 59 int tm_hour; // 小时,范围从 0 到 23 int tm_mday; // 一月中的第几天,范围从.原创 2021-09-30 10:36:57 · 890 阅读 · 0 评论 -
按位与&和逻辑与&&的区别
#include <iostream>using namespace std;int main(){ cout << "1 && 2 == " << int(1 && 2) << endl; cout << "1 & 2 == " << int(1 & 2) << endl; if(1 && 2) { cout << "1.原创 2021-07-27 12:00:30 · 441 阅读 · 0 评论 -
C++之remove和remove_if
一、Remove()函数remove(beg,end,const T& value) //移除区间{beg,end)中每一个“与value相等”的元素; remove只是通过迭代器的指针向前移动来删除,将没有被删除的元素放在链表的前面,并返回一个指向新的超尾值的迭代器。由于remove()函数不是成员,因此不能调整链表的长度。remove()函数并不是真正的删除,要想真正删除元素则可以使用erase()或者resize()函数。用法如下:string str1 = "Text w转载 2021-03-10 14:21:02 · 807 阅读 · 0 评论 -
字符串去除分隔符
//算法1 #include <iostream>#include <fstream>#include <string>using namespace std;bool isValidHexadecimalChar(const char ascii_data){ bool result = false; result = (ascii_data >= '0' && ascii_data <= '9') ||.原创 2021-03-09 15:17:20 · 1007 阅读 · 0 评论 -
C++数组作为参数
C++里面把数组当参数这个知识点一直不是很清晰。这次把他明确化了。非引用参数非引用参数的情况还是比较简单的。int compute(int array[4]);int compute(int array[]);int compute(int *array); // 编译器会把上面两个解释成这个1 2 3以上三种原型都会被编译器解释为指针,因此即使在数组定义里写了长度为4,依然可以传任意长度的数组进来。引用参数首先,明确数组的引用和引用的数组。。int compute转载 2021-01-19 12:14:13 · 1028 阅读 · 0 评论 -
#ifdef __cplusplus
本来这个是只应该出现在运用cpp编程的工程中的,但是,就算是单片机编程,都已经会看到这个了,所以提出来解释一下。条件编译,属于c/c++共有的,但是由于在有些场合,在c++代码内嵌c语言能使编程更加便利。使用c语言编译器gcc编译下面代码:#include<stdio.h>#ifdef __cplusplusextern "C" {#endif int a=10;#ifdef __cplusplus}#endifint main(void){转载 2021-01-06 10:31:34 · 629 阅读 · 1 评论 -
std::vector初始化
#include <iostream>#include <stdint.h>#include <vector>using namespace std;int main(){ std::vector<uint8_t> temp0(0,0); cout << "vector size:" << temp0.size() << endl; std::vector<uint8_t> temp1(.原创 2021-01-05 10:21:27 · 7788 阅读 · 0 评论 -
命名空间和宏定义的问题
宏定义不受命名空间的约束宏是在编译前预处理阶段处理的定义的宏从define到undef或者文件尾有效,所以宏的作用域和它所在的代码块无关。原创 2021-01-02 14:57:37 · 1724 阅读 · 0 评论 -
C++中使用C库函数
1. 头文件中声明extern "C" {#include ".h"}2. 对函数声明extern "C" {int s(void);int a(void);}原创 2020-12-15 20:03:14 · 1105 阅读 · 0 评论 -
C++:实现将字符串被空格符分割为两个子串
#include <iostream>#include <cstring>#include <string>using namespace std;int main(){ std::string request_str("akldjgk klk"); std::cout << "request_str:" << request_str.c_str() << std::endl; int index = re.原创 2020-12-11 13:55:16 · 1052 阅读 · 0 评论 -
C++:判断链表是否有环
判断给定的链表中是否有环。如果有环则返回true,否则返回false。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head)原创 2020-12-03 23:01:16 · 1614 阅读 · 0 评论 -
C++:最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。示例1输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res.原创 2020-12-03 22:07:56 · 613 阅读 · 0 评论 -
C++:string和数组相互赋值
#include <iostream>#include <cstring>#include <string>using namespace std;int main(){ char data = 1; string element; element.assign(&data, sizeof(data)); element += ""; int size = element.size(); cout << "data .原创 2020-11-24 18:58:44 · 2731 阅读 · 0 评论 -
C++:使用libjsoncpp读写json文件
"libjsoncpp"json不支持8进制和16进制数值转换。#include "json/json.h" Json::Reader reader; Json::Value root; std::ifstream in("/data/shared/dtc_info.json", std::ios::binary); if(!in.is_open()) { ALOGE("[%s] Error opening file", __func_原创 2020-11-05 13:48:06 · 1324 阅读 · 0 评论