
c++
ypp1
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
top(k)问题
目的:求数组中第k大(小)数。方法一:使用堆排序,时间复杂度为O(nlg(k))代码可以使用优先队列进行设计。方法二:使用快速排序,利用下标index来进行判断,可以只递归一半,应为另一半必定所有的数据都小于第k大的数。代码如下:#include <iostream>#include "vector"#include "algorithm"using namespace std;int quick(vector<int>& nums, int原创 2020-08-22 10:15:06 · 259 阅读 · 0 评论 -
c++实现单例模式以及单例的派生类
单例模式一个类只用一个对象,如果用户创建多个对象需要返回错误,构造函数只能被访问一次,不能给用户随便访问构造函数的接口,即构造函数不能是public类型的。每个用户在不知道这个类唯一实例的情况下都可以快速访问这个对象。那么就必须有一个函数需要返回该实例,并且该函数可以不适用对象进行调用,那么该函数一定是一个static函数,由于类中的静态函数只能访问静态变量,所以实例变量也必须是一个static的。综上所述:需要一个返回实例对象的静态函数 实例类型需要时静态变量 构造函数不能时public类型原创 2020-08-01 11:00:38 · 1545 阅读 · 0 评论 -
字符串的排列
题意:给出一个字符串,求其全排列。注意不能有重复。比如string str = "aba"。方法:回溯,但是需要判重。方法一:该方法使用的交换字符的原理vector<string> result; bool jupdge(int begin, string s, int end){ for(; begin < end; begin++){ if(s[begin] == s[end]){ retur原创 2020-07-23 19:11:31 · 187 阅读 · 0 评论 -
c++中istringstream如何分割字符串
1,首先假设string str = "i am a student";字符串str必须是使用空格分开的。为了得到各个字串,可以进行按照空格的坐标进行分割,但是可以借助流进行自动分割,如下所示。istringstream input(str);string temp;while(input >> temp){ cout<<temp<<endl;}/* output:i am a原创 2020-07-23 14:38:52 · 787 阅读 · 0 评论 -
多线程连续打印01010101
有两个线程,一个打印0,一个打印1,让两个线程连续打印010101。一般情况下,多个线程要同时请求cpu资源,所以对打印语句加锁是不行的,因为解锁后谁也不知道哪个线程又抢到了cpu资源。分析:如果线程0打印”0“,下一步必然让线程0阻塞,并且唤醒线程1。然后线程1打印"1",之后让线程1阻塞,唤醒线程2。这样依次执行。mutex mu;condition_variable c_v;int current = 0;void fun(int id){ while(true){原创 2020-07-21 18:03:58 · 301 阅读 · 0 评论 -
组合排列中重复数问题
在全排列问题中,有这样的一个问题,比如给你一个数组[1,2,3,4],求出他的全排列,可以有很多种方法,康拓展开是一个。但是当出现重复数字时就不好处理了,比如[1,2,1,4],在回溯的过程中,会出现相同的排列,使用两个相同的1造成的,程序的逻辑本身没有错。其实全排列就是递归树,如下所示观察发现,第二个子树刚开始能不能选1呢,答案是否定的。因为前一个1没有用,这就造成当前选1,接下来有...原创 2019-08-27 14:30:59 · 4924 阅读 · 0 评论 -
二叉树的节点统计
一般而言,对一个没有什么约束的二叉树进行节点的统计,都是递归int get_value(TreeNode *root){ if(!root){ return 0; } return get_value(root->left) + get_value(root->right) + 1;}统计完全二叉树的叶子节点数由于完全二叉树只有最后层...原创 2019-08-27 14:08:36 · 548 阅读 · 0 评论 -
大顶堆和小顶堆以及堆排序
大顶堆和小顶堆的理论是相同的,实现上就只有符号的变化。堆的含义堆是类似与完全二叉树的结构(注意可能不是满二叉树), 堆的结构是要使得每个根节点的元素大于(小与)子节点元素,左右节点是没有要求的。堆排序堆排序是分为三个步骤:调整堆,使得以当前节点为根的子树是一个大顶堆,但不保证其他节点满足。 遍历从len/2----->1的所有根节点,分别进行调整,结束后该堆满足一个大顶...原创 2019-08-23 18:33:46 · 977 阅读 · 0 评论 -
c++中std::move的简单理解
在程序中,经常会碰到内存的申请和释放。比如对某个对象的复制,有时是对该对象的复制,当对象所占内存空间很大时,需要新申请一个相同大小的内存空间,造成内存的浪费。这里的std::move()是完成对象的移动功能。在需要的时候可以节省很大内存。 左值和右值的区别 std::move()的使用是简单的,这里分析一下程序的内部进程。首先是理解左值和右值的区别。一般左值是一个对象,右值是对象的值。...原创 2019-08-09 18:52:11 · 4527 阅读 · 1 评论 -
upper_bound和lower_bound的使用方法
1没有第四个参数的方法,vector<int> array;int a;auto result = lower_bound(array.begin(), array.end(),a);//查找第一个大于等于a的数auto result = upper_bound(array.begin(), array.end(), a);//查找第一个大于a的数。2带有第四个参...原创 2019-07-16 15:58:52 · 392 阅读 · 0 评论 -
读primer c++补充笔记
如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字 指针的类型必须与其所指对象的类型一致,但允许令一个指向常量的指针指向一个非常量对象。 指针本身是一个常量并不意味着不能通过指针修改其所指对象的值,完全取决于所指对象的类型//1int errNumb = 0;int *const curErr = &errNumb; //这时执行*...原创 2019-06-29 10:55:16 · 171 阅读 · 0 评论 -
c++中string的应用
定义和初始化string对象string s1 //默认初始化,s1是一个空窜string s2(s1) //s2是s1的副本string s2 = s1 //和上面的等价string s3("value") //s3是字面值"value"的副本,除了字面值最后的那个空字符串外string s4(n, 'c') //把s4初始化为由连续n个字符c组成的串直接初始化和拷贝初始化...原创 2019-06-26 15:55:57 · 453 阅读 · 0 评论 -
qsort函数和bsearch函数的使用
bsearch函数为c中的方法,二分查找法,使用的前提是数组必须有序。qsort函数为排序函数#include "iostream"#include "cstdio"#include "cstdlib"using namespace std;int compare(const void* a, const void* b){ return *(int*)a - *(int*...原创 2019-04-04 21:48:19 · 319 阅读 · 0 评论 -
c++中const的使用
一、定义 const,顾名思义,可以理解为常量,他的值不能被改变。所以当我们需要让某一个变量一直保持不变时(防止被篡改),就需要将该变量定义为常量。重点:const int bufsize = 512; 此处定义了常量bufsizse,所以以后就不能被改变。思考:再加上一条语句:bufsizse = 512;对不对?答案:不对,试图通过bufsize向const对象写值。因为...原创 2019-01-11 21:15:00 · 213 阅读 · 1 评论