从键盘输入一系列字符(以回车结束),按数字,大小写字母分类计数,并在屏幕上打印出来。 DATA SEGMENT INFOR1 DB 0AH,0DH,"Please Press Any Key to input a letter:$" INFOR2 DB 0AH,0DH,"Lowercase Letter : $" INFOR3 DB 0AH,0DH,"Uppercase Letter : $" INFOR4 DB 0AH,0DH,"Digit : $" INFOR5 DB 0AH,0DH,"Other Letter : $" DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: PRINT MACRO STR,RHS ; MACRO 为宏 LEA DX,RHS MOV AH,09H INT 21H 继续阅读 >>


刘生玺 18/06/28 21:03:23
1. 几个基本成员函数的作用: u.reset() 释放u指向的对象 u.reset(q) 如果提供了内置指针q,就令u指向这个对象 u.reset(nullptr) 将 u 置为空 u.release() u 放弃对指针的控制权,返回指针,并将 u 置为空 2. 一些规则: 某个时刻只能有一个unique_ptr 指向一个给定的对象。当它销毁时,它所指向的对象也会被销毁。 初始化 unique_ptr 只能采用直接初始化的方式 (explicit 关键字) 不支持复制构造与赋值操作 在创建或者是reset一个具有删除器的unique_ptr 时,必须提供删除器 不支持拷贝与赋值的规则有一个例外,那就是我们可以拷贝或者赋值一个将要被销毁的unique_ptr(右值引用) ,比如: /* 从函数返回一个unique_ptr */ unique_ptr<int> clone(int p ){ return unique_ptr<int>(ne 继续阅读 >>


刘生玺 18/06/13 00:10:08
/*shared_ptr.h 文件*/ /********************************************************* > File Name: shared_ptr.h > Author: Liu Shengxi > Mail: 13689209566@163.com > Created Time: 2018年06月05日 星期二 15时35分48秒 *****************************************************/ #ifndef _SHARED_PTR_H #define _SHARED_PTR_H template<typename> class shared_ptr ; template< class T > void swap( shared_ptr<T>& lhs, shared 继续阅读 >>


刘生玺 18/06/06 18:01:03
1.将 bl 和 cl 中的数字相加并输出结果 DATA SEGMENT STR1 DB 0AH,0DH ,'THE RESULT IS : $' ;0AH,0DH 为换行 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: PRINT MACRO STR ; MACRO 为宏 MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR MOV AH,09H ; 打印STR INT 21H ENDM ADDBLCL MACRO R1,R2 ; MOV AL,R1 ADD AL,R2 DAA ; 压缩型BCD码加法调整指令 ,默认调整 al PUSH AX MOV CL,4 SHR AL,CL ; 逻辑右移指令 CALL PRINT_DL ;子程序调用 POP AX 继续阅读 >>


刘生玺 18/05/31 17:37:57
零:使用STL自带的函数(less与greater) vector<int> v{45,2,5,8454,34,68421,5,84,1,5}; sort(v.begin() ,v.end(),less<int>());//从小到大 sort(v.begin() ,v.end(),greater<int>());///从大到小 一:普通比较函数 假设有一个vector<<\string>>,你的任务是统计长度小于5的string的个数,如果使用count_if 函数的话,代码就是这样: bool LengthIsLessThanFive(const string& str) { return str.length() < 5; } int res=count_if(vec.begin(), vec.end(), LengthIsLessThanFive); 继续阅读 >>


刘生玺 18/05/24 18:05:04
一:打印 Hello World DATA SEGMENT BUF DB 'HELLO WORLD! THIS IS MY FIRST ASM FILE! $' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 小记: 1. 字符串的最后一个字符必须是“$” 2. LEA DX,BUF 等价于 MOV DX,OFFSET BUF 3.通过功能号为 9 的DOS功能调用实现字符串的显示 09H 显示字符串 01H 单个字符的输入 02H 单个字符的输出 二:计算 继续阅读 >>


刘生玺 18/05/16 15:22:38
提问: 1.为什么要搞出四种,用原先使用的那种不可以吗? 答:因为强制类型转换时是具有一定的风险的,这种风险包括(精度的损失 ,派生类与基类的一些转换关系) 而且根据风险程度的不同导致的 bug 也会不同 ,再加上存在许多种类型之间的转换 , 所以C++选择将其分为四种 。 2.这样分类之后又有什么好处呐? 答:关于这个问题,让我们来设想一个场景。假如你现在知道你的bug 是因为指针类型之间的转换所导致的 ,那你现在就必须得定位它/它们 ,如果还用以前的那种方式,就会找到许多无关于这次需求的东西,如果使用C++的这种方式,你只需要去找所对应的 _cast 就行了 。很方便吧 :) 四种强制类型转换:static_cast , interpret_cast ,const_cast和 dynamic_cast (1)static_cast <1>适用:用来进行比较“自然”和低风险的转换 。比如:整型与实数,字符型之间的转换 <2>不适用:不同类型指针, 继续阅读 >>


刘生玺 18/05/10 15:47:29
在C++11中,callable object 包括传统C函数,C++成员函数,函数对象(实现了()运算符的类的实例),lambda表达式(特殊函数对象)共4种。程序设计,特别是程序库设计时,经常需要涉及到回调,如果针对每种不同的callable object单独进行声明类型,代码将会非常散乱,也不灵活。如下示例: #include <iostream> #include <functional> using namespace std; // 传统C函数 int c_function(int a, int b) { return a + b; } // 函数对象 class Functor { public: int operator()(int a, int b) { return a + b; } }; int main(int argc, 继续阅读 >>


刘生玺 18/05/10 13:33:39
这个我是感觉在思路上没有那么复杂啦,参考书上的提示应该能够自己写出来,就直接上代码了 #include<iostream> #include<memory> #include<utility> #include<string> #include<algorithm> //Equivalent to " vector<string> " class StrVec{ public: StrVec():elements(nullptr),frist_free(nullptr),cap(nullptr){ } StrVec( const StrVec & ) ; StrVec( const std::initializer_list<std::string> & ) ; StrVec& operator=( const StrVec & ) ; 继续阅读 >>


刘生玺 18/04/19 19:17:33
首先解释一下什么是拷贝控制 ?其实就是拷贝构造函数、赋值操作符和析构函数这三种函数 . 那么如何编写这三个函数就叫做拷贝控制了. 1.整体需求 : 总共设计两个类: 1.一个是Message,代表电子邮件消息(或者其它) 2.一个是Folder ,代表消息目录 用生活中最一般的想法去思考,每一个消息目录中可以有许多消息(也可以有相同消息) , 每一条消息也可以出现在多个目录中 如下图所示 : 2 .程序架构设计 : 1. 记录Message在哪个Folder 中,记录Folder中有哪些Message ? 在 Message 中保存一个它所在的 Folder 的指针的set 集合 .(也就是说每一个Message中都有一个set集合) 同样的,在 Folder 中保存一个它包含的Message 的指针的set 集合 . 2. 删除一条 Message 时如何处理 ? 当我们删除一条 Message 时 ,我们需要考虑的是如何去删除其他目录中的 继续阅读 >>


刘生玺 18/04/18 21:23:13