![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
init_bin
路上…
展开
-
JD 2020春实习生笔试编程_1
1.股票及时止损问题有n支股票,每天最多卖m支,需要卖出的股票数为q, 每支股票对应一个价格,每晚一天卖出,则亏损数=价格*天数。求最少亏损。2.输入数据格式5 2 第一行表示有5支股票 每天最多卖出2支1 2 3 4 5 每支股票的价格3 需要卖出3支股票输出:那么最少应该是第一天卖出1*(2+3)=...原创 2020-04-20 00:07:22 · 212 阅读 · 0 评论 -
Effective C++条款25:考虑写出一个不抛出异常的swap
转载自:https://www.cnblogs.com/wuchanming/p/3757328.html我们可以调用std下的swap函数,这是一个模板函数:既可以: int a = 1; int b = 2; std::swap(a,b); cout<<"a = "<<a<<" b = "<<b<<endl;也可以(前提这个类型支持复制构造函数和赋值构造函数):class Test{publ转载 2020-11-18 14:42:34 · 101 阅读 · 0 评论 -
Effective c++条款11:在operator=中处理“自我赋值”
目录1.不安全的operator=版本2.安全的operator=版本1.不安全的operator=版本class bitmap{};class widget{ widget& operator=(const widget& rhs){ delete pb; pb = new bitmap(*rhs.pb); return *this; }private: bitmap* pb;};自我赋值的不安全:这里的rhs对象如果和this指向原创 2020-11-14 21:54:55 · 336 阅读 · 0 评论 -
Effective c++条款5:编译器默默生成并调用的哪些函数
目录1.空类包含的哪些函数2.一个默默生成的copy构造函数的过程3.当类中有引用成员或const成员,需要自己定义赋值操作符函数1.空类包含的哪些函数对于我们写的一个空类代码1,其实相当于代码2,当相应的构造、析构等被用到的时候,编辑器就会默默生成出来并调用。//代码1class empty{};//代码2class empty{public: empty(){ } //构造函数 empty(co.原创 2020-11-14 17:27:52 · 102 阅读 · 0 评论 -
Effective c++条款4: 确保对象被使用前就被初始化
目录1.分清赋值与初始化2.成员初始化列表必用的几种形式3.成员初始化次序1.分清赋值与初始化对于赋值,看如下class, 这里对象的成员变量name、address都不是被初始化的,而是被赋值的。具体过程是:首先调用缺省的构造函数为name、address设置初值,然后在调用赋值操作符函数进行赋值的。class temp{public: temp(string& m_name, string& m_address){ name = m_name; .原创 2020-11-13 22:00:57 · 153 阅读 · 0 评论 -
【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
转载自:https://blog.csdn.net/shulianghan/article/details/100002073文章目录 I 异常处理 II 字符串异常 III 异常对象 IV 抛出任意类型对象 V 自定义异常 VI 异常相关代码 I 异常处理1. 异常处理 :使用 "try{}catch(){}" 将抛出异常的代码包起来 ,注意将可能抛出异常的代码包裹在 try 后的大括号中 ,将异常处理逻...转载 2020-09-05 21:27:43 · 2623 阅读 · 0 评论 -
C++中new、operator new和placement new的区别
new和delete是C++中的表达式,用于创建一个新的对象。它们是对堆中的内存进行申请和释放,而且这两个都是不能被重载的。要实现不同的内存分配行为,需要重载operator new和operator delete而不是new和delete。1.仔细说说newexpression在使用了new运算符之后,编译器实际做了哪些事情呢?Foo* p = new Foo();在这个代码中,这里的new实际上是执行如下3个过程:1调用operator new分配内存,大小为Foo对象所占...转载 2020-09-02 20:47:55 · 412 阅读 · 0 评论 -
多态、重载的面试题:多态情况下,子类又创建相同名称和返回值,参数不同的虚函数。还有子类创建相同名称和参数,返回值不同的虚函数。
1.多态情况下,子类在写一个相同名称与返回值,但参数不同的虚函数,此时是发生一个重载。不能通过父类指针和引用指向子类对象进行调用,只能通过具体的子类对象进行调用。#include <iostream>using namespace std;class a{public: int ma; a(int m1):ma(m1){} virtual void tt(int n){ cout << n << " " <<ma<< en原创 2020-09-02 19:33:22 · 408 阅读 · 0 评论 -
二叉树的前中后非递归遍历:迭代法
利用辅助栈的方法进行迭代的前中后遍历。前序遍历vector<int> preorder(TreeNode* root){ vector<int> res; if (root == nullptr){ return res; } stack<TreeNode*> s; TreeNode* curr = root; while (!s.empty() || curr){ while (curr){ s.push(curr); res.原创 2020-09-02 10:34:50 · 106 阅读 · 0 评论 -
volatile如何保证内存可见性和指令重排序
一、volatile如何保证内存可见性1.被volatile修饰的变量一旦发生改变,会立即将缓存中的数据写入到内存当中。2.其他cpu处理器通过嗅探在总线上传播的数据来查看自己的缓存中的数据是否过期,如果过期,就会将缓存中对应的数据置为无效。当处理器要对这个数据进行修改操作的时候,会重新从内存中将数据读取到缓存中。二、volatile如何保证指令重排序编译器和处理器都会执行指令重排的优化,如果在指令间插入一条内存屏障,那么内存屏障前后的指令会被禁止重排序优化. 对volatile变量进行写.原创 2020-08-31 21:38:12 · 378 阅读 · 0 评论 -
单例模式:静态局部变量方式
一种简单的单例模式,使用静态局部变量。为什么是静态局部变量可以保证线程安全性?原因是Magic Static特性。如果变量在初始化时,并发线程同时进入到static声明语句,并发线程会阻塞等待初始化结束。这样可以保证在获取静态局部变量的时候一定是初始化过的,所以具有线程安全性,同时也避免了new对象时指令重排序造成对象初始化不完全的现象。并且相比较与使用智能指针以及mutex来保证线程安全和内存安全来说,这样做能够提升效率。具体实现:class Singleton{private: S原创 2020-08-30 22:50:39 · 2513 阅读 · 0 评论 -
vector<>的内存增长的倍数及swap的释放内存
vector当增加元素达到上限的时候,会动态的扩容。以下进行实验(VS2013编辑器)。(这个扩容,在vs下面的扩容是1.5倍,,在linux gcc下面的扩容应该是2倍的,见下面转载的链接)#include <iostream>#include <vector>using namespace std;void printSizeCapacity(vector<int>& ivec){ cout << "size: " <转载 2020-08-24 19:27:50 · 220 阅读 · 0 评论 -
构造函数设置为private,会怎样。
构造函数设置为private,会怎样?1.无法静态的创建对象了,即不能通过 A a这种方式创建对象了。只能通过在类的内部的静态成员函数中new一个对象(动态的创建对象)。#include <iostream>using namespace std;class A{private: A(){ ; }public: static A* get(){ A* a1 = new A(); return a1; } ~A(){ ; }};int ma..原创 2020-08-19 21:07:11 · 2930 阅读 · 0 评论 -
C++的final与override
1.final保证子类无法重写一个函数的方法:即在这个函数后面加上final. 看下图。当然也可以加在类名后面,此时会保证此类不能被继承。2. override当子类重写父类中的函数,那么在子类的函数后面加上override,这样编译器会做名称和函数参数的检查。override保证了这个函数定会重写基类中的函数,不然报错。这个可以发现,当函数名相同,参数类型不同,编译器就会报错。这个可以发现,无论你变成啥样的函数,只要你后面加了override你必须是重写父类的函原创 2020-08-14 20:57:27 · 191 阅读 · 0 评论 -
指针函数到函数指针作为函数的返回值
转载自:https://www.cnblogs.com/yangjiquan/p/11465376.html首先说一下指针函数:1.指针函数的定义顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名*函数名(函数参数表列);其中,后缀运算符括号"()"表示这是一个函数,其前缀运算符星号"*"表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个"指向返回值为…的指针(地址),"类型名"表示函数返回的指针指向的类...转载 2020-06-16 11:07:27 · 4788 阅读 · 2 评论 -
STL的greater与less
greater<T>()和less<T>()分别是用于升序和降序排列时用的。头文件是<functional>一、sort的greater与lesssort默认是less 是生成一个从小到大的排序。 使用greater是一个从大到小的排序。#include <iostream>#include <vector>#incl...原创 2020-05-02 16:42:27 · 837 阅读 · 0 评论 -
c指针的一些总结
c指针再看,想梳理一下自己的思路,故总结了一下。原创 2020-03-19 23:20:29 · 111 阅读 · 0 评论 -
内存检测工具memwatch的使用(windows)
一、memwatchmemwatch是一个能够用于检测内存泄漏和错误的工具。下载链接:https://www.linkdata.se/sourcecode/memwatch/二、使用步骤1.将memwatch.h和memwatch.c复制到项目之下。 2.程序包含memwatch.h (如果有多个文件,应该每个文件都要包含这个.h 未实验)3.主程序最上面进行宏定义:...原创 2020-03-19 21:01:14 · 881 阅读 · 0 评论 -
剑指offer中partition函数注解
partition函数是快速排序的基础,在看剑指offer里的partition代码时,有些卡,这里注解一下。int Partition(int data[], int length, int start, int end){ //无效输入控制 if(data == nullptr || length <= 0 || start < 0 || end >=...原创 2020-02-28 23:35:44 · 428 阅读 · 1 评论 -
循环链表实现解决约瑟夫问题
程序通过学习传智扫地僧视频后,编写完成。1.约瑟夫问题介绍:2.头文件 circlelist.h#ifndef _CIRCLELIST_H_#define _CIRCLELIST_H_typedef void CircleList;typedef struct _tag_CircleListNode{ struct _tag_CircleListNode *nex...原创 2019-12-18 16:08:06 · 352 阅读 · 0 评论 -
字符串指针变量和字符串数组的记录
1.字符串指针变量首先明确:存放变量地址的变量为指针变量。1.1 字符串指针变量的定义形式char *p= "i like";这里p就是一个字符串指针变量。p存放的是字符串“i like”的首地址。1.2 通过字符串指针变量访问字符串的方式char *p = "i like";//打印icout<<p[0]<<endl;//打印整个字符串"...原创 2019-09-12 15:08:35 · 299 阅读 · 0 评论