C/C++
似水流年1990
这个作者很懒,什么都没留下…
展开
-
函数默认参数注意事项(C++)
如果从某个位置有了默认值,那么从这个位置开始,从左往右都必须得有默认值;下面的写法是正确的:void func(int a, int b=10, int c=20){ }void func(int a, int b, int c=20){ }但这样写不可以:void func(int a, int b=10, int c=20, int d){ }void func(int a, in...原创 2020-01-03 13:18:46 · 646 阅读 · 0 评论 -
自我实现string类(C++)
#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std; class String {public: String(const char* str);//默认构造 String(const String& str);//拷贝构造 String& operator=(co...转载 2020-01-03 13:01:17 · 135 阅读 · 0 评论 -
C++类占用内存大小(C++)
类所占内存的大小主要是由成员变量(静态变量除外)决定的,成员函数(虚函数除外)是不计算在内的。成员函数的存储还是以一般函数的模式进行存储。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。类中的成员函数相当于C语言中一个普通函数,按照一个普通函数的方式存储在内存中,做到使得两者相联系的功臣是...转载 2020-01-03 12:56:34 · 881 阅读 · 0 评论 -
STL之map与unordered_map对比
map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。map中的元素是按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值都小于根节点的键值,右...原创 2019-12-31 11:41:57 · 540 阅读 · 0 评论 -
STL容器之map unordered_map multimap....
multimapmultimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素。///1. 初始化 multimap<int, string> mapStudent; multimap<int, string>::iterator iter, beg, end; ///2. 添加元素 ...原创 2019-12-31 11:31:53 · 208 阅读 · 0 评论 -
使用TypeScript脚本实现幂函数功能Pow(x, n)
let myPow = function (x, n) { let r = 1; let len = Math.abs(n); for (let i = len; i > 0; i--) { if (i % 2 == 0) { x = x * x; i = i / 2; } ...原创 2019-12-30 20:16:33 · 1266 阅读 · 0 评论 -
设计模式之单例模式(C/C++)
概念:单例模式是一种常见的软件设计模式。它的核心结构只包含一个被称为单例的特殊类。它的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。应用场景:有一些对象只需要一个,如:对话框、系统日志、显卡等设备的驱动程序对象、一台PC连接一个键盘。单例模式有3种实现方式:懒汉式、饿汉式和双重锁的形式。懒汉:第一次用到类的实例的时候才回去实例化。饿汉:单例类定义的时候...转载 2019-12-23 10:59:26 · 363 阅读 · 0 评论 -
一个关于编解码格式的问题
C++服务端其中text.ini文件用notepad++打开,看右下角如下则表明此文件为GB2312编码,客户端解析时也要用此编码格式解析std::string strFilePathName = "C:/Test/text.ini";std::ifstream ifs(strFilePathName);std::stringstream sstr;sstr << ifs...原创 2019-11-22 15:34:28 · 149 阅读 · 0 评论 -
C++11之智能指针 shared_ptr/unique_ptr/weak_ptr
为了更加容易(更加安全)的使用动态内存,引入了智能指针的概念。智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。shared_ptr我们可以认为每个shared_ptr都有一个关联的计数器,通常称其为引用计数,无论何时我们拷贝一个shared_ptr,计数器都会递增。当我们给shared_ptr赋予一个新值或是shared_ptr被销毁(例如一个局部的shared_ptr...转载 2019-10-11 13:50:35 · 547 阅读 · 0 评论 -
const与指针,const与函数
const与指针常量指针:指向常量的指针int b = 500;1、const int * a = & b;2、int const * a = & b;以上中*a不允许改变,指针a可变指针常量:指针本身是常量3、int * const a = & b;指针a不允许改变,*a可改变常量指针常量4、const int * const a = & b;...原创 2019-10-22 11:37:31 · 150 阅读 · 0 评论 -
协程与线程的区别与联系
协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。一个程序可以包含多个协程;一个进程包含多个线程;多线程:相对独立,有自己的上下文,切换受系统控制;协程:相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。协程和线程区别:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标...原创 2019-10-11 10:53:30 · 641 阅读 · 0 评论 -
大端(big endian)和小端(little endian)
现在主流的CPU,intel系列的是采用的little endian的格式存放数据。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而 JAVA编写的程序则唯一采用big endian方式来存储数据。字节排序按分为大端和小端,概念如下大端(big endian):低地址存放高有效字节小端(little endian):低字节存放地有效字节以C/C++语言为例:对于...原创 2019-10-11 10:17:01 · 427 阅读 · 0 评论 -
STL容器迭代器失效之案例(vector)
对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。所以不能使用erase(iter++)的方式,还好erase方法可以返回下一个有效的iterator。vector<int> vec={1,...原创 2019-09-20 09:51:27 · 177 阅读 · 0 评论 -
WinDbg轻松搞定dump文件中的问题
准备的文件:只需dump文件和对应的pdb文件步骤如下:1):在电脑D盘下创建mydump和mylocalsymbols,分别用于放置dump文件和微软官方符号文件2):将dump文件和对应的pdb文件放置D:\mydump文件夹下3):打开WinDbg软件:File==&amp;amp;amp;gt;Symbol File Path,在弹出的窗口中输入D:\mydump;SRVD:\mylocalsymbol...原创 2019-03-14 17:46:41 · 2185 阅读 · 0 评论