c++回顾
William_Chan_6
这个作者很懒,什么都没留下…
展开
-
【C++】官方指导如何生成.dll(动态链接库)
看来看去还是官网写的最清楚:演练:创建和使用自己的动态链接库 (C++)原创 2021-11-18 14:30:27 · 665 阅读 · 0 评论 -
【C++】如何优雅地分割字符串
全网唯一真预言家#include<iostream>#include<vector>#include<sstream>#include<string>using namespace std;//输入形如[1,2,34,4,-8]的字符串,返回该数组vector<int> decode(string s) { s = s.substr(1, s.size() - 2); stringstream ss(s); string nu原创 2021-05-20 10:39:58 · 113 阅读 · 0 评论 -
【C++】浮点数运算误差与逆元
问题的出现使用double与int型数据进行相同的运算过程:int main() { int mod = 1e9 + 7; double a = pow(13094024580916, 9); double b = 2; cout << int(fmod(a / b, mod)) << endl; long long r = 1; for (int i = 0; i < 9; i++) { r *= 13094024580916 % mod; r %=原创 2021-04-24 11:29:50 · 1171 阅读 · 0 评论 -
【c++】右值引用,左值引用与move
参考一篇不错的博文精髓:临时对象被使用完之后会被立即析构,在析构函数中free掉申请的内存资源。如果能够直接使用临时对象已经申请的资源,并在其析构函数中取消对资源的释放,这样既能节省资源,有能节省资源申请和释放的时间。 这正是定义移动语义的目的。简单来说,自定义类的构造函数,使用左值引用的构造函数、operator=重载函数等,会申请新的内存,复制数据;而使用右值引用的这些函数中,则直接使用原有的内存,并保证原有内存不被释放,这样就节省了一部分时间,提高了swap等函数的效率。在使用自定义类时原创 2020-12-24 16:50:45 · 170 阅读 · 1 评论 -
【c++】顶层const(top-level const),底层const(low-level const)与constexpr
参考:《C++ Primer》第五版一篇不错的博客1.顶层与底层const对于一个对象和它的指针,为了区分二者谁是常量,定义了顶层const(top-level const)与底层const(low-level const),二者定义如下表:const指针对象顶层 const常量变量底层 const变量常量示例:对于拷贝与赋值,常量可以赋值给变量,反之不行,例如:总结:1.顶层const修饰的是指针,即指针不可改变,只能指向初始化的对象;底层原创 2020-12-24 15:02:37 · 418 阅读 · 0 评论 -
【c++】如何给函数传递不定数量的参数
有时候我们给一个函数传递的参数数量是不确定的,比如如果想打印多个字符串,数量不定,那么可以这么写:#include <stdarg.h>#include <iostream>using namespace std;void printStrings(int argNum, ...) { va_list args; va_start(args, argNum); for (int i = 0; i < argNum; i++) {原创 2020-12-22 01:46:24 · 3122 阅读 · 0 评论 -
【c++】单调栈高效实现下一个更大元素查找
题目来源:leedcodeclass Solution {public: vector<int> nextGreaterElement(const vector<int>& nums1, const vector<int>& nums2) { vector<int> result; if (nums1.empty()||nums2.empty()) return result; stack<int> mo原创 2020-07-06 15:55:45 · 224 阅读 · 0 评论 -
【c++】二分法查找单调数组中某个数的位置
题目来自leetcode:二分法模板:1.left小于等于right2.left更新为middle+13.right更新为middle-14.返回leftclass Solution {public: int searchInsert(const vector<int>& nums, int target) { int lefti = 0, righti = nums.size() - 1; int middlei; while (lefti <= r原创 2020-06-23 10:52:01 · 816 阅读 · 0 评论 -
【c++】循环中申明变量与循环外申明变量哪个更快
对于int等基本数据类型,当然是提前申明,然后再循环中进行初始化更快:void test() { clock_t t0 = clock(); int a; for (int i = 0; i < 10000000; i++) { a = 0; } cout << "time0:" << clock() - t0 << endl; t0 = clock(); for (int i = 0; i < 10000000; i++) { i原创 2020-06-20 10:40:32 · 495 阅读 · 0 评论 -
【c++】结构体sort排序,在类中调用自定义compare函数的正确姿势
众所周知,使用sort算法+自定义compare函数对自定义结构体进行排序:struct NumCount{ int num, count; NumCount(int n,int c):num(n),count(c){}};bool compare2(NumCount* a, NumCount* b) { return a->num < b->num;}void printNcs2(const vector<NumCount*>& ncs) { fo原创 2020-06-13 10:45:40 · 1874 阅读 · 1 评论 -
【c++】牛客网 vivo2020届春季校园招聘在线编程考试题 手机锁屏的有效模式
题目参考:牛客网 vivo2020届春季校园招聘在线编程考试题一根烟,一壶酒,一道算法编一宿。。。这是个明显的图结构,九个结点,任意两个节点间相连,我们可以遍历图,并求出所有满足如下要求的有序遍历:1.遍历节点数在区间[m,n]内2.遍历中两两相邻节点的中点,判断中点条件: 中点处无对应节点 或 对应节点已被访问过(好复杂。。。。)当然还有个不用图结构的方法!(真是个小天才。。)...原创 2020-03-31 13:21:11 · 443 阅读 · 0 评论 -
【c++】n个整数(1~n)逐个相加的实现(不使用乘除、if、else、循环体、swich等语句)
题目来源:https://leetcode-cn.com/problems/qiu-12n-lcof/求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。不能用乘除法,所以不能用等差数列求和公式,不能用循环体没事我可以用递归,然而递归躲不开的是递归终点的判断,不让用if让我怎么归???我懵了。。直到我...原创 2020-03-27 14:11:49 · 1012 阅读 · 0 评论 -
【c++】map与unordered_map,插入查找二选一
今天了解到unordered_map的查找性能比较强,特地试了一下。下面的程序比较了map与unordered_map的insert、find、count的效率//比较map与unordered_map的效率#include <iostream>#include <map>#include <unordered_map>#include <t...原创 2020-03-23 11:18:39 · 1270 阅读 · 0 评论 -
【c++】短小函数怎么写更快,宏定义才是爸爸
以下比较了四种写法:#define max0(x,y) x>y?x:yconstexpr int max1(int x, int y) { return x > y ? x : y;}int max2(int x, int y) { return x > y ? x : y;}inline int max3(int x, int y) { return x...原创 2020-03-22 21:28:33 · 345 阅读 · 0 评论 -
【c++】函数返回结构体数组的神奇之处
众所周知,如果我们想用函数返回一个数组,那么我们应该用new来分配内存,而不是单纯地申明数组局部变量,否则函数体结束后局部变量被释放,数组也就丢失了://申明局部变量int* test0() { int a[2] = { 1,2 }; return a;}//用new分配内存int* test1() { int* a = new int[2]{ 1,2 }; return a;...原创 2020-03-22 20:54:38 · 3816 阅读 · 0 评论 -
【c++】大疆笔试题,应该怎么吃呢
题目如下:时间限制:CC++语言1000Ms;其他语言3000 Ms内存限制:CC+语言65536KB;其他语言589824KB题目描述:小w非常喜欢吃零食,经常都会去零食间里购买半价的零食吃,但是他为了控制自己的体重,因此会限制自己买零食的开销在某个数值以内。但是小W有一个特别的爱好,他对于某些零食特别的喜欢,并且会对这些零食的喜爱程度进行排序。对于零食A和零食B,如果小W对零食A的...原创 2020-03-19 17:48:23 · 1031 阅读 · 3 评论 -
【c++】分治思想,棋盘覆盖问题
问题描述参考网站:https://github.com/huihut/interview/tree/master/Problems/ChessboardCoverageProblem程序流程:代码:main.cpp/*在一个2^k * 2^k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格。棋盘覆盖问题就是要用图示的4种不同形态的L型骨牌覆盖给定棋盘上除特殊方...原创 2020-03-19 14:51:52 · 527 阅读 · 0 评论 -
【c++】大疆笔试题,字典map的应用
大疆笔试题之不听话的机器人,题目如下不听话的机器人时间限制:CC+语言100Ms;其他语言3000s 内存限制:CC+语言6556KB;其他语言589824KB题目描述:小平时言欢倒腾一些小东西,最近他准备给白己做的小机器人加入一套语音控制的功能,每个指令对应一个动作由于语言转文宇有很多现成的方案,所以小B打算直接复用这些方案,但是语音转成了文字之后,还需要将文字跟具体的动作对应起来。因此...原创 2020-03-06 19:21:51 · 714 阅读 · 0 评论 -
【c++】大疆笔试题,动态规划模板类解决0/1背包问题
题目如下:爱玩游戏的小N时间限制:C/C++语言1000MS;其他语言3000MS 内存限制:C/C++语言65536KB;其他语言589824KB题目描述有许多程序员都热爱玩游戏,而小n自称为游戏王,曾玩过几百种游戏,几乎所有能玩到的游戏大作都玩遍了。随着时间的推移,他发觉已经没有游戏可以让他玩了!于是他想改玩一些古老的游戏,以成为真正的游戏王。他希望在接下来的一段时间内将过去出的游戏...原创 2020-03-06 17:41:26 · 649 阅读 · 0 评论 -
VS Code C++配置
环境准备安装VSCode,安装常用插件安装编译器,这里用TDM_GCC,安装后要添加到系统变量添加后重启,否则可能出错!!项目文件夹的创建创建项目文件夹,新建一个.cpp文件配置.vscode文件夹:重点在于各个.json文件的配置,注意路径要和自己的路径相同cc_cpp_properties.json{ "configurations": [ {...原创 2020-01-06 21:51:40 · 768 阅读 · 0 评论 -
【c++回顾】3.1经典算法问题-完全背包问题1--背包饱和问题
问题描述:给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?每种物品有无限个传统的解法是利用动态规划,通过填写一个二维表格,获取最大解,具体可以参考这个网站。但是我大概看了下这种解法,虽然是这么多年总结下来的经典解法,但是总感觉解法不是很直观(自己尝试了手动填写二维表格,确实是种很精炼的解法),并且得到最优解...原创 2019-08-25 17:37:30 · 352 阅读 · 0 评论 -
【c++回顾】2.1容器-vector
今天尝试实现一个链式多叉树,多叉树每个节点的内容包括三项:数据子节点链表类父节点地址结果在嵌入自己的链表类的过程中成功崩溃。。。。无意中发现c++有个东西叫容器,其中有个经典容器叫vector,据说能存储各种数据类型!当时我就嗨了(尼玛c++的课能不能讲点这些实用的东西(虽然有可能是我忘了-_-))于是决定改道,先把实现链式多叉树放一放,学习一下c++的STL库,重点学习容器及迭代...原创 2019-08-20 20:52:50 · 179 阅读 · 0 评论 -
【c++回顾】1.3数据类型-栈
实现一个栈,用于存储货物信息(名称,价格,质量)。栈可以用链表+特殊数据出入方式实现。实现的功能:栈的初始化栈的销毁获取节点地址获取节点内容入栈出栈按关键词查找栈,并返回含有关键词的节点打印栈代码如下://实现一个栈,用于存储货物信息(名称,价格,质量)//栈可以用链表+特殊数据出入方式实现#include "pch.h"#include <iostrea...原创 2019-08-15 13:27:18 · 176 阅读 · 0 评论 -
【c++回顾】杂谈-关于new与delete
突然发现昨天写的链表程序里,链表类的析构函数只释放了头指针,而没有释放其他节点的指针,一惊之下十分担心这样多跑几次程序就会把电脑内存占满(虽然实际上不太可能。。),所以做了个小试验。试验目的:用new申请的内存,如果不delete,程序结束后该内存会释放吗?试验代码:#include "pch.h"#include <iostream>using namespace std;...原创 2019-08-15 12:21:05 · 132 阅读 · 0 评论 -
【c++回顾】1.2数据类型-链表
实现一个链表,用于存储学生信息(姓名,年龄,电话)。类比上一篇文章,采用类实现这一链表。实现的功能:链表的初始化链表的销毁获取节点地址获取节点内容追加节点插入节点插入头节点删除节点根据关键词查找节点,打印所有含有关键词的节点序号及节点内容打印链表以后如果用到其他功能再更新。【注意】新建链表节点时务必用new来申请内存。直接用&符获取变量地址,并将变量链接进入...原创 2019-08-14 21:20:59 · 165 阅读 · 0 评论 -
【c++回顾】1.4数据类型-队列
用类实现一个链式队列,用于存储银行排队信息(姓名,年龄,身份证号)。类似于栈,队列也可以看作是有着特殊数据出入方式的链表。实现的功能:队列的初始化队列的销毁获取节点地址获取节点内容入队出队按关键词查找栈,并返回含有关键词的节点打印栈代码如下:// 使用类实现一个链式队列,用于存储银行排队信息(姓名,年龄,身份证号)#include "pch.h"#include ...原创 2019-08-19 19:28:30 · 173 阅读 · 0 评论 -
【c++回顾】杂谈-关于vector的内存分配速度
今天学习vector的时候在这个网站看到这样一些描述:按照这个描述,我们使用vector时应尽量一次申请足够的内存,这样能减少其内存分配时间。于是我做了个试验,想看下内存分配速度提升有多明显,然而试验结果却是 多次内存申请比一次内存申请更节省时间 。测试代码如下:void test3(){ auto start = chrono::steady_clock::now(); aut...原创 2019-08-21 12:06:44 · 469 阅读 · 0 评论 -
【c++回顾】杂谈-关于vector的数据插入删除方式
受这个网站的启发:决定利用swap实现快速的vector数据插入删除函数·//swap式插入元素void InsertVectorElementbySwap_StudentInfo(vector<StudentInfo> &studentinfos, int i, StudentInfo studentinfo){ studentinfos.push_back(stu...原创 2019-08-21 14:16:13 · 196 阅读 · 0 评论 -
【c++回顾】1.5数据类型-树
终于到了非线性、层次关系的数据结构——树了,所有的数据结构里,最不熟悉的就是树和图,今天就先来好好回顾一下树。在这不想写太多基础概念,因为概念上的东西百度一下就有,不再赘述。看过基本概念后,我认为有三个地方值得注意:1.树描述了非线性、层次性的数据2.树具有递归特性,即树的子树与其结构类似。3.树的数学表达,层次括号法那么问题来了,树的具体应用背景是什么?之前的表,栈,队列都有着明确的...原创 2019-08-22 10:12:12 · 273 阅读 · 0 评论 -
【c++回顾】3.1经典算法问题-0/1背包填满问题
简单的背包填满问题:(题目参考这个网站)假设有一个能装入容量为C的背包和n件重量分别为w1,w2,…,wn的物品,能否从n件物品中挑选若干件恰好装满背包,要求找出所有满足上述条件的解。示例答案:当C=10,各件物品重量为{1,8,4,3,5,2}时,可以找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)和(3,5,2)。上述网站给出了一种解法,我这里给出另一种解法。我的解题思路:...原创 2019-08-22 16:08:35 · 1012 阅读 · 0 评论 -
【c++回顾】3.1经典算法问题-0/1背包价值最大问题
问题描述:给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?每种物品只有一个解题思路:有了遍历n维0/1数组的方法,我们可以直接遍历所有的结果,记录价值最大时的拿取方案,详见我的上一篇文章。查了一些现有的代码,因为自己有明确的解题思路,所以就没怎么看别人的解法。。。值得注意的是关于空间复杂度的问题,很多文章里...原创 2019-08-22 17:11:41 · 774 阅读 · 0 评论 -
【c++回顾】3.1经典算法问题-完全背包问题2--背包价值最大问题
接上一篇博客,继续解决完全背包问题。问题描述:给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?每种物品有无限个。利用上一篇博客的子功能,我们可以获得所有的使背包饱和(即无法再装入任何一个物品)的方案,求取所有方案的背包价值,找出最大价值及其对应的拿取方案即可。上代码://给定n种物品和一个背包。物品i的...原创 2019-08-26 13:27:42 · 1004 阅读 · 0 评论 -
【c++回顾】3.1经典算法问题-多重背包问题
问题描述:给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?每种物品有ni个。问题分析:多重背包问题就是在完全背包问题的基础上增加了物品个数的限制。按照我们原来的解题思路:“首先递归遍历出所有使背包饱和(即背包中无法再放下任何一个物品)的方案,再求取背包最大价值及最佳拿取方案。”,我们首先应求出所有使背包饱和的...原创 2019-08-27 13:52:36 · 1446 阅读 · 0 评论 -
【c++回顾】3.1经典算法问题-混合背包问题
问题描述:给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?每种物品有ni个或无限个问题分析:利用我的上一篇博客多重背包填满问题的程序,只需要将无限个物品的数量设置为INT_MAX即可代码如下://给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。应该如何选择装入背包中的物品,使...原创 2019-08-30 11:31:50 · 530 阅读 · 0 评论 -
【c++回顾】1.1数据类型-顺序表
今天开始复习一下c++,之前学的比较菜,就从基础的数据类型开始回顾。首先是最简单的顺序表。一些理解:顺序表可以用于存储自己定义的数据结构,但是对于定制的数据结构需要定制对应的数据插入函数等;顺序表对应的物理存储是一块连续的内存,所以存储数据量较大时建议改用链表;初始化顺序表需要指定列表的最大容量,因此顺序表使用时会受最大容量限制,这点链表也完全碾压顺序表。所以能用链表的话还是用链表吧。参考《...原创 2019-08-14 17:15:57 · 271 阅读 · 0 评论