自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Vincent的专栏

天道酬勤 水滴石穿

  • 博客(361)
  • 资源 (1)
  • 收藏
  • 关注

原创 《Go程序设计语言》中文版翻译错误

page101, “我们可以忽略掉整个日志”,应该为“我们可以忽略掉整个错误”page101 “进行错误检查之后,检测到失败的情况往往都在成功之前” 应该为“进行错误检查之后,首先进行错误处理,然后再处理正常的逻辑”page101 “之后跟着实际的函数体一直到最后” 后面一句漏翻译了“以最大限度的减少缩进”。page101 “偶尔, 一个程序必须针对不同各种类的错误采取不同的措施” 应该为...

2019-07-11 23:01:46 830

原创 NCE 3.23 One man’s meat is another man’s poison 各有所爱-句子成分分析

NCE 3.23 One man’s meat is another man’s poison 各有所爱-句子成分分析People become quite illogical when they try to decide what can be eaten and what cannot be eaten.When引导时间状语从句, 在从句中what引导的名词从句作decide的宾语If you lived in Mediterranean, for instance, you would co

2021-03-23 22:58:19 1098

原创 NCE3.22 By heart 熟记台词-句子成分分析

NCE3.22 By heart 熟记台词-句子成分分析Some plays are so successful that they run for years on end.So that 引导结果状语从句In many ways, this is unfortunate for the poor actors who are required to go on repeating the same lines night after night.In many ways作状语,who引导的限定

2021-03-22 23:21:16 773 1

原创 NCE3.21 Danile Mendoza 丹尼尔.门萨多 -句子成分分析

NCE3.21 Danile Mendoza 丹尼尔.门萨多 -句子成分分析However, boxing was very crude, for there were no rules and a prizefighter could be seriously injured or even killed during a match.For 引导原因状语从句One of the most colourful figures in boxing history was Daniel Mendoza

2021-03-22 16:39:31 528

原创 记一个bug : C2555 overriding virtual function return type differs and is not covariant from

今天同事遇到一个编译错误找我帮忙看一下。原以为编译错误应该好解决,没想到搞了半天才fix,在此记录一下。由于公司代码涉及机密且比较复杂,不方便贴出来,因此我写了一个简化的例子来展示这个编译错误是如何产生的。1.代码假设我们有一个namespace名为zoo, 在zoo中有一个animal基类,一个name类,还有一个dog类继承自animal类。这三个类分别位于三个头文件。代码如下://animal.h#pragma onceclass Name;namespace zoo { cla

2020-12-14 18:04:28 1624

原创 Makefile傻瓜教程

Makefile傻瓜教程Makefile是组织代码编译的一种简单办法。make工具和makefile是比较复杂且强大的,本教程甚至还没有触及到make工具的皮毛,但是作为入门指南,它可以帮助你快速又轻松地为中小型项目创建自己的Makefile。1. 一个简单的例子让我们从一个简单例子开始,首先我们需要准备三个文件。这三个文件分别代表主程序,工具函数的实现和声明。//hellomake.c#include<hellomake.h>int main(){ // call a

2020-11-03 17:45:38 529

原创 右值引用

右值引用1. 什么是右值引用右值引用是C++11新加的一种引用类型,是一种仅能绑定到右值上的引用。不同于左值引用仅用一个&表示,右值引用用两个&&表示。int x{ 5 };int& lref{ x }; // l-value refrence initialized with l-value x int&& rref{ 5 } // r-value refrence initialized with r-value 5右值引用有两个非常有用的性

2020-10-19 15:35:13 3616 1

原创 智能指针和移动语义

intro to smart pointer and move semantics(翻译改写自https://www.learncpp.com/cpp-tutorial/15-1-intro-to-smart-pointers-move-semantics/)1. 裸指针导致的内存泄漏问题考虑下面这个函数,在这个函数中我们动态申请了一片内存。void someFunction(){ Resource *ptr = new Resource; // Resource is a struct

2020-10-19 11:03:34 656

原创 MacOS静态链接和动态链接

上一篇文章已经讲过了window系统下如何制作使用静态链接库和动态链接库, 这篇文章我们来看一下在Mac系统(Linux系统也是一样)下面如何制作静态链接库和动态链接库太长不看版假设我们有一个util.cpp文件和main.cpp文件,在main文件中调用util.cpp文件中定义的函数。我们把util.cpp文件制作成静态库和动态库。生成目标文件g++ -c util.cpp -o util.o打包静态库ar crv libutil.a util.o生成动态库g++ -sh

2020-10-17 12:32:23 932

原创 VS静态链接和动态链接

最近接手了一个新的项目, 遇到一系列链接错误,折腾的头大。上周末终于完全解决了各个project之间的依赖及链接问题, 趁此机会,我仔细阅读了一些资料并在vs2019上做了一些实验,算是基本搞清楚了静态链接和动态链接的一些基本概念, 在这里记录一下,希望对自己也对其他人有所帮助。下面通过一个实验来解释在vs2019环境下如何进行静态链接和动态链接。1. 新建三个工程首先我们需要新建一个名为Test的解决方案,并在Test中新建两个工程,Printer和Calc, Configuration均配置为De

2020-09-13 22:08:47 2805 4

翻译 python 排序

排序作者:Andrew Dalke and Raymond Hettinger在python中,list有一个内置函数list.sort()可以对list进行原址排序.同时python中还有另外一个sorted()函数,可以从一个可迭代对象构造一个排序的list.(可迭代对象不只是list,也包括dict等).在本文档中,我们会探讨python中对数据进行排序的各种方式.排序基础一个简单的升序排列是很简单的,只需要调用sorted函数即可,它会返回一个新的已排序list.>>&g

2020-06-08 12:52:46 3323 3

原创 IPC--消息队列

0. 什么是消息队列消息队列可以认为是一个消息列表。线程可以往消息队列中放置消息或者取出消息。每个消息都是一条记录,由发送者赋予一个优先级。一个进程在往一个消息队列中写入消息之前,不需要有某个进程在该队列上等待消息到达(这跟管道和FIFO是相反的)。消息队列具有随内核的持续性, 也就是说在内核重新启动之前,不管发消息的进程或者取消息的进程是否结束,消息队列是始终存在的。消息队列有两种,分别是...

2019-11-09 21:28:26 409 1

原创 agaAjNcIVX

博客搬家

2019-07-22 12:29:38 281

原创 线程总结3-屏障

线程总结3-屏障0. 屏障屏障是用户协调多个线程并行工作的同步机制。屏障允许所有的合作线程都到达某一点,然后从该点继续执行。1. 相关函数1.1. 初始化#include<pthread.h>int pthread_barrier_init(pthread_barrier_t *restrict barrier, const ...

2019-07-07 21:55:18 526 1

原创 多线程总结2-条件变量

0. 条件变量条件变量是pthread线程库为线程同步提供的另外一种机制。它允许线程在某条件没有到达的情况下投入睡眠,在条件到达之后被唤醒。条件变量通常与互斥锁配合起来使用。1. 相关函数1.1. 初始化条件变量的类型是pthread_cond_t,它可以通过两种方式进行初始化。静态分配的条件变量可以通过常量PTHREAD_COND_INITIALIZER初始化, 如:pthrea...

2019-07-06 11:44:53 341

原创 如何正确删除vector中的元素

今天来探讨C++中的一个基础问题。如何正确地删除`vector`中符合条件的某元素。比如,有一个`vector<int> nums = {1, 2, 2, 2, 2, 3, 5}`,要求删除`nums`中所有值为2的元素。C++初学者可能很快就写出代码:

2019-06-18 23:19:37 35792 3

原创 GDB调试技巧-打印vector的元素值

GDB调试技巧-打印vector的元素值我们平常在使用GDB调试程序的时候,往往需要查看一个STL容器里面存储的元素的值是多少。但是用GDB的p命令打印容器,我们会得到一堆乱七八糟的东。比如有一个vector<int> nums = {1,2,3},当我们使用p nums命令时,我们得到的结果是:(gdb) p nums$1 = {<std::_Vector_base&lt...

2019-05-28 00:16:22 10319 3

原创 如何实现一个min stack

如何实现一个min stackQ: 如何设计一个特殊的栈,支持min()操作,返回栈中的最小元素.这个问题来源于去年面试遇到的一道题目,面试官给了20分钟时间让设计这样一个栈.当时时间有限,虽然写出来了一个版本,但是那个版本还存在很多的问题,比如不够通用,只能支持int类型数据;同时,效率也不高, 存在大量的数据拷贝.面试完后又仔细思考了一下,重新写了一个版本,记录一下,分享给大家!这个版本...

2019-05-08 13:31:43 722

原创 从汇编的角度理解什么是引用

C++中引入的引用类型,给我们带来了很大的方便。通过向函数传递引用,我们既可以享受像传递指针一样直接修改变量值的优点,又避免了空指针和野指针造成的问题。在日常开发中我们应该尽量使用引用,避免使用指针。但是引用到底是什么,看起来好像引用跟指针有着千丝万缕的联系,同时两者又有很大的差别,那么引用跟指针到底是什么关系呢?教材上通常会说,引用就是变量的别名,但是光看这句话可能还是不太明白引用的本质。其实按...

2019-03-15 23:42:06 1192

原创 记一个输入缓冲bug

在论坛上看到一个同学贴的一段代码如下:#include&lt;stdio.h&gt;int main(){ int num, cnt, sum = 0; cnt = scanf("%d", &amp;num); while (cnt != 1) { printf("cnt = %d\n", cnt); cnt = scanf("%d",...

2019-03-15 23:39:46 261

原创 C++两种构造方法的效率对比

0. 为什么初始化列表效率高?C++中类的构造函数写法有两种,一种是使用初始化列表,一种是在代码块中赋值。很多书中(包括C++ Primer、C++ Primer Plus等等)都会提到应该尽量使用初始化列表而不是在代码块中赋值,因为使用初始化列表通常比在代码块中赋值效率要高。但是这个结论是怎么来的?如何验证呢?今天我们来设计一个小例子对比一下两者之间的区别。1. 定义一个Man类首先,我们...

2019-03-10 13:24:52 1101

原创 自己动手实现vector

有了实现string的基础,在加上一点点模板的知识,就可以自己动手实现一个vector了。下面是我实现的代码,比较简单。有点犯懒了,讲解以后再写吧!#ifndef MY_VECTOR_H#define MY_VECTOE_H#include&amp;lt;cassert&amp;gt;typedef unsigned int size_t;template &amp;lt; class T&amp;gt;class...

2019-03-09 14:04:02 2661

原创 深入理解static关键字(2)

上一篇文章当中讨论了C语言中static关键字的用法。这一篇来看一下C++中的static。C语言中的用法在C++中一样适用,但是C++中static又新增了一种用法,用来修饰类的成员,称为类的静态成员。1.static修饰类的成员类的静态成员不属于任何对象,类的实例中不包含任何与静态数据成员有关的数据。举个例子:// teacher.hclass teacher {public: ...

2019-03-07 20:55:27 313

原创 深入理解static关键字(1)

static关键字是C和C++中很重要的一个关键字,初学者往往搞不清楚这个关键字的真正含义。很多人把这个关键字与变量作用域混为一谈,这种认识是严重错误的!static确实跟变量的作用域有一些关系,但是这两者并不是一回事。这篇文章来探讨一下static关键字的含义,首先放结论:static用于修改标识符(变量或者函数)的链接属性或者存储类型!static用于修改标识符(变量或者函数)的链接属性...

2019-03-06 17:28:38 643 2

原创 如何实现一个string类(2)

上一篇文章实现了myString类的构造函数、拷贝构造函数和析构函数,并且重载了&lt;&lt;运算符。这篇文章来讨论一下赋值运算、下标操作和+=拼接字符串操作。1. 赋值运算符重载首先来看一下赋值运算符重载。在实际应用中,我们经常遇到需要将一个对象赋值给另外一个对象的情况,那么就需要使用赋值运算符=。跟默认的拷贝构造函数一样,如果我们没有显式地定义一个赋值运算符重载函数,那么编译器会提供一...

2019-03-04 11:54:04 473

原创 如何实现一个string类(1)

string类是C++当中用的非常频繁的一个类,它提供了很多处理字符串的函数,让字符串的使用变得像int、float等built-in类型一样简单。string类的实现包含了大量c++语言的知识,其中有很多值得讨论的问题。自己动手实现一个string类是学习c++语言的好方法,可以检验自己一下C++基础知识掌握的如何。下面我们来尝试动手实现一个字符串类。1.定义成员变量我们的字符串类需要处理...

2019-03-04 11:53:27 2347

原创 《程序员升职记》9.八倍扩大装置

10.八倍扩大装置这一层的任务是把inbox里的每个数都乘以8,然后丢到outbox里面去。乘以8,相当于x2x2x2,那么可以这样做:先把输入放到地毯上0位置拿手里的数字加上地毯上0位置的数字把和放回地毯0位置拿手里的数字加上地毯上0位置的数字把和放回地毯0位置拿手里的数字加上地毯上0位置的数字输出不要问我为啥这么傻,不用循环来做。因为没有计数器,无法终止循环,因此只能...

2019-02-26 18:03:12 2072

原创 《程序员升职记》8.零保护行动

9.零保护行动第9层的任务是只把零放到outbox-- HUMAN RESOURCE MACHINE PROGRAM --a:b: INBOX JUMPZ c JUMP bc: OUTBOX JUMP a

2019-02-26 18:01:32 5544 7

原创 《程序员升职记》7.三倍扩大器

8.三倍扩大器这一层的任务是把input的每一个数字放大三倍,放到outbox把输入拷贝到地毯上,然后把手上的数字与地毯上的数字加两次即可实现放大三倍的功能。-- HUMAN RESOURCE MACHINE PROGRAM --a: INBOX COPYTO 0 ADD 0 ADD 0 OUTBOX J...

2019-02-26 18:00:45 979

原创 《程序员升职记》6.零扑灭行动

7.零扑灭行动这一层的任务是把inbox中所有不是零的东西输出。现在又多了一个新命令jumpz,只有手里拿着的是0才发生跳转。-- HUMAN RESOURCE MACHINE PROGRAM --a:b: INBOX JUMPZ b OUTBOX JUMP a...

2019-02-26 17:58:58 1659 1

原创 《程序员升职记》5.多雨之夜

6.多雨之夜第五层是咖啡间,没有任务,直接跳到第6楼。第六楼的任务是把inbox里的每两个数加起来,放入outbox。现在可以用add指令了,add指令可以把手上的数字和地板上任意位置的数字相加。-- HUMAN RESOURCE MACHINE PROGRAM --a: INBOX COPYTO 0 INBOX ADD 0 ...

2019-02-26 17:57:02 508

原创 《程序员升职记》4.扰码干扰器

4. 扰码干扰器这一层的任务是从inbox从拿出两个物品,已相反的顺序输出。直到inbox被清空。这一层新加了一个指令copyto,可以将小人手上拿的物品放到地毯上的任意位置。-- HUMAN RESOURCE MACHINE PROGRAM --a: INBOX COPYTO 0 INBOX OUTBOX COPYFROM 0...

2019-02-26 17:55:50 657

原创 《程序员升职记》3.复印楼层

03.复印楼层这一层的任务是把地毯(对应寄存器或内存)上的三个字母输出。在这一层有新增了一个指令cpoyfrom,这条指令可以从地毯上复制内容。-- HUMAN RESOURCE MACHINE PROGRAM -- COPYFROM 4 OUTBOX COPYFROM 0 OUTBOX COPYFROM 3 OUTBOX ...

2019-02-26 17:52:59 687

原创 《程序员升职记》2.繁忙的收发室

02.繁忙的收发室第二关跟第一关的任务一样,只是新增了一条jump指令。这样我们就可以使用循环了。-- HUMAN RESOURCE MACHINE PROGRAM --a: INBOX OUTBOX JUMP a...

2019-02-26 17:51:29 2810

原创 《程序员升职记》1.收发室

收发室第一关是引导关,非常简单,要做的事情就是把输入的内容原封不动的输出。可用的指令只有INBOX和OUTBOX-- HUMAN RESOURCE MACHINE PROGRAM -- INBOX OUTBOX INBOX OUTBOX INBOX OUTBOX ...

2019-02-26 17:47:58 838

原创 《程序员升职记》0.简介

《程序员升职记》(英文名:Human Resource Machine)是一款编程类的游戏,通过模几条简单的指令模拟CPU实现各种各样的功能。游戏中的主人公扮演一名程序员入职明日公司,从最基础的收发室开始干起,每完成一个任务就可以升职进入下一楼层。随着楼层的升高,主人公的职位也越来越高(同时,头发丝越来越少,尴尬)。这个游戏在steam上只要36块钱,非常划算。...

2019-02-26 17:41:56 1693

原创 如何理解const成员函数

在深入理解const成员函数之前,先来复习一下const关键字的基础用法。1. const修饰某个非指针类型变量const 修饰某个非指针类型变量,表示该变量只读。const int a = 10;a = 20; // 错误,不可以赋值2. const修饰指针const 在*号前面表示指针指向的内容不可更改,指针本身可以改变char buf[] = "hollo, ...

2019-02-21 12:01:15 1690

原创 深入理解C++多态

在之前发的一篇文章《虚函数表分析-C++多态的实现》中,已经分析过C++多态的实现原理。这篇文章来看一个具体的例子,这个例子来源于一道经典的C++面试题,看起来蛮简单,但是相当多的人都在这里翻车了。这篇文章希望能把这道题阐述清楚,给大家带来一些帮助。题目给了下面这样一段代码(代码我略有更改),问程序的输出是什么,并解释输出结果。class A {public: int a; v...

2019-02-20 13:56:01 462

原创 记一个bug

今天,有一个同事写了下面这样一段测试代码。这段代码的功能非常简单,从头到尾打印vector中的每个元素(vector的规模较小,不会超过int的表示范围)。看起来好像没什么问题?但是跑起来却发现时不时会出现Segmentation fault错误。这是为什么呢?void printVector(vector&amp;amp;lt;int&amp;amp;gt; &amp;amp;amp;s){ for (int i = 0; i &amp;amp;...

2019-02-13 19:47:18 222

原创 【动态规划】【Leetcode】120. Triangle

1.题目描述Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.For example, given the following triangle[ [2], [3,4], ...

2019-02-02 17:11:36 269

Automation Studio使用入门手册

贝加莱的PLC使用说明,针对初学者,挺不错的资料

2015-09-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除