- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 (5)Unique Lock和Lazy Initialization
前面我们已经介绍了两种定义互斥锁的方式: (1)mu.lock() (2)std::lock_guard<std::mutex> locker(mu) 接着我们介绍第三种方式, (3)std::unique_lock<mutex> locker(mu,std::defer_lock); 其中参数std::defer_lock表明locker延迟锁定,在之后我们可以...
2018-07-14 15:29:46
205
原创 (8)使用可调用对象
这里讲解的是多线程的几种创建方式.class A{public: void f(int x,char c){} int operator()(int N){ return 0;}};void foo(int x){}int main(){ A a; std::thread t1(a,6);//传递a的拷贝给子线程 std::thr...
2018-07-09 16:12:46
226
原创 (7)Feature,Promise和async()
其实,这节课程中一开始的引入future的环节不是太清晰,反正只要知道使用了future, 在代码中可以省略mutex 和条件变量的使用,并且也保证了主线程在得到x的值的过程,一定是在子线程结束后发生.而这个代码段是为了得到从线程中返回值.#include <deque>#include <functional>#include <iostream>...
2018-07-09 16:01:41
728
原创 (6)条件变量
先列出这节课的例程代码.#include <deque>#include <functional>#include <iostream>#include <fstream>#include <thread>#include <string>#include <mutex>using names
2018-07-09 15:18:29
296
原创 (4)死锁
aha,什么是死锁,死锁又是如何产生的呢?来来,接着往下走…//这是一段产生了死锁的代码#include <thread>#include <iostream>#include <string>#include <mutex>#include <unistd.h>#include <fstream>us...
2018-07-09 10:11:04
190
原创 (3)数据竞争与互斥对象
这节课终于要解决之前的一个bug了,也就是数据竞争的问题,先看一下如下代码:#include <thread>#include <iostream>#include <string>using namespace std;void function_1(){ for(int i=0;i>-100;--i) cou...
2018-07-09 09:44:22
240
原创 (2)线程管理
一上来就用一段代码来开启这节课...#include <thread>#include <iostream>using namespace std;void function_1(){ cout << "Hello world!" << endl;}int main(int argc, char** argv){...
2018-07-08 22:59:51
108
原创 (1)课程介绍
之前一直想看一下多线程编程,但是迟迟没有去动手,直到之前参加一个比赛,碰见相关内容,这次无意间在网易云课堂上发现这个课程,这个系列的博客就当作自己学习的笔记,作为自己的再次巩固.废话不多说,直接上学习记录.并发编程包括两种方式,分别是多线程编程和多进程编程.多进程中,每一个进程都只有一个线程,进程间通信方式有文件,管道,消息队列等.另一种并发模型就是多线程,即一个进程中两个或两个以上的线程,线...
2018-07-08 22:13:04
137
转载 (1)引用
引用就是为对象起了另外一个名字,通过符号&amp;来定义引用类型。引用并不是一个对象,它仅仅只是为了和对象绑定在一起。#include &lt;iostream&gt;#include &lt;stdio.h&gt;using namespace std;int main(){ int value = 10; int &amp;ref = value; pr...
2018-07-03 11:04:38
232
原创 8.、String to Integer (atoi)(字符串转整)
题目要求,就是实现一个atoi函数的功能,将字符串转换成整数。其中,这个题目难度不大,就是有些边界条件要考虑。 1、数据类型,这个题也要考虑变量的数据类型,因为输出整数的范围是[−2^31, 2^31 − 1]。并且,当转换结果超出了该范围,即当大于( 2^31 − 1)时,结果则为( 2^31 − 1);若小于(−2^31),则为(−2^31)。 2、在遇见有效数字之前,若出现‘-’,‘...
2018-07-01 16:59:23
1144
原创 7.、Reverse Integer(整数取反)
题目要求很简单,就是给定一个在[−2^31, 2^31 − 1]范围内的整数,对该整数取反。 比如, 输入=123, 输出=321。 输入=-123,输出=-321。 输入=120, 输出=21。这个题目在求解的时候,需要注意的是数据类型的选取,因为涉及到溢出,其次当输出结果产出范围后,结果要变为0。在编写代码的时候,因为忘记了移位符号和运算符的优先级顺序,卡了一下,刚好当天晚上在看...
2018-07-01 16:03:29
4361
原创 6、ZigZag Conversion(之字转换)
题目要求给定一个字符串,然后将其按顺序以之字排列,然后将字母串按行来输出,其中之子字符回路的行数由参数numRows控制。比如, example1: 输入 s= “PAYPALISHIRING”,numRows=3, 输出=”PAHNAPLSIIGYIR” P&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; A &amp;nbsp;&amp;nbsp;
2018-06-30 20:18:36
198
原创 5、Longest Palindromic Substring(最长回文子字符串)
题目要求给定一个字符串s,然后找出该字符串s中最长的回文子字符串,s的长度不超过1000。比如, example1:输入=”babad”,输出=“bab”。 example2:输入=“abbd”, 输出=“bb”。这个题,我第一直觉就是用暴力求解,用两个索引,起始索引为i,i的最大值为len-maxlen,当剩余字符串长度小于过程中出现的最长回文的长度,则结束。然后就是,结束索引j...
2018-06-30 19:43:02
103
原创 4.、Median of Two Sorted Arrays(两个有序序列的中位数)
题目要求在给定两个长度分别为m和n的有序序列时,找出这两个序列合起后的中位数。并且要求时间复杂度为O(log(m+n))。首先,中位数的定义是,当序列长度为偶数时,中位数的值为序列中间两个数的均值;当序列为奇数时,中位数为正中间的数。当序列长度为n时,其值分别为(array[n/2]+array[n/2-1])/2、array[n/2]。为了达到时间复杂度的要求,故采用两个索引分别同时遍历两个序列...
2018-06-27 20:24:15
153
原创 3、Longest Substring Without Repeating Characters(最长不重复子串)
题目要求,给定一个string,求string中最长的不重复的子串长度。例如,给定“abcabcbb”时,最长的不重复子串为“abc",所以解为3。给定“bbbb”时,最长的不重复子串为“b",所以解为1。给定"pwwkew"时,最长的不重复子串为“wke",所以解为3。在解决如何判断是否出现开始重复字母时,利用一个数组来记录字符的出现与否,即利用字符的ascii码作为数组的索引。故数组的大小为2...
2018-06-27 19:48:05
120
原创 2、Add Two Numbers(两个数的求和)
这道题的题目意思很简单,就是求两个非负整数的和,只不过每一个数都是由链表表示,并且链表的数据元素的顺序,和整数的每一位数字的顺序是相反的,比如342,链表表示为2->4->3。因此,计算出的结果的链表存放元素的顺序也是反的。这里,我们只要同时遍历两个链表,然后将每一个元素相加,对每一位上的和进行取余,然后保留进位符,在下一个位置上进行相加。遍历两个链表后,最后还要判断一次进位符,如果不...
2018-06-22 21:24:54
2470
原创 1、Two Sum(两数之和)
1、这道题目比较简单,是求给定的数组nums中,找到其中两个不同数字相加为给定值target。然后将这两个数字的下标返回即可。直接通过暴力搜索,AC这道题。C语言:int* twoSum(int* nums, int numsSize, int target) { int *result = (int *)malloc(sizeof(int)*2); for(int i=0;i&l...
2018-06-22 21:07:59
282
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人