![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
Coding.Freshman
这个作者很懒,什么都没留下…
展开
-
STL源码之traits技法
获得迭代器的“性质”最近在拜读侯捷先生的STL源码剖析,当读到traits技法时,感觉非常痛苦,读不太懂,于是想从网上搜一下关于这方面的知识,可是发现网上的解答并不能解决自己的疑惑,于是自己花了很长时间研究这个问题,下面跟大家分享一下我的理解。首先要说的是,迭代器是特性的,比如说迭代器的5个种类,Input Iterator、Output Iterator、Forward Iterator、B...原创 2018-10-25 00:24:18 · 179 阅读 · 0 评论 -
关联容器的find()成员
关联容器关联容器自身是有find()的成员函数的,该find()不同于泛型算法中的find();具体用法如下:map<T,t> m;m.find(T value);注意:查找的是键,而不是值。...原创 2018-10-05 10:57:03 · 339 阅读 · 0 评论 -
使用new和delete管理动态内存存在的三个常见的问题
忘记delete内存。忘记释放动态内存会导致人们常说的“内存泄露”问题,值得注意的是查找内存泄露错误是非常困难的,因为通常程序运行了很久之后,真正耗尽内存时,才能检测到这种错误。忘记释放动态内存会导致人们常说的“内存泄露”问题,值得注意的是查找内存泄露错误是非常困难的,因为通常程序运行了很久之后,真正耗尽内存时,才能检测到这种错误。使用已经释放掉的对象。释放内存后将指针置为空,有事可以检测...原创 2018-10-31 21:26:04 · 675 阅读 · 0 评论 -
智能指针的陷阱
智能指针可以提供对动态内存分配的内存安全又方便的管理,但是要注意一些陷阱,为了正确使用智能指针,我们必须坚持一些基本规范:不使用相同的内置指针值初始化多个智能指针。不delete get() 返回的指针。不使用get()或者reset另一个智能指针。如果你使用get()返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就会变为无效的。如果你使用智能指针管理的资源不是new分配的内...原创 2018-10-31 22:17:57 · 502 阅读 · 0 评论 -
讲解类型转化----C++
隐式转化隐式转化是自动执行的,不需要程序员的介入,有时甚至不需要程序员了解。举个例子:int ival = 3.555 + 3;加法的两个运算对象的类型不同,3.555为double类型,而3是int型,C++不会将两个不同类型的值直接想加,而是根据类型转换规则将两个类型统一之后再求值,在这个例子中,3被提升为double型,然后两个double型想加,最后再转化为int型。何时发生类...原创 2018-10-30 22:59:34 · 236 阅读 · 0 评论 -
如何在linux上用g++编译Cpp
首先,你要用vim将程序写好,比如//hello.cpp#include <iostream>using namespace std;int main(){ cout<<"hello,cpp"; return 0; }写好之后,在命令模式输入wq保存退出,然后在终端使用如下指令。g++ hello.cpp -o hello//编译成功之后,用...原创 2018-11-03 20:20:42 · 790 阅读 · 0 评论 -
如何用cin读入空格
在我们使用cin读入字符时,默认是跳过中间的空格以及可能的制表符和换行符,那么,如何让其不跳过空格呢。我们可以使用操作符noskipws来实现。cin>>noskipws;//设置cin读取空白符;char ch;while(cin) cout<<ch;cin>>skipws; //恢复默认状态。这样,程序就会读取空格了。...原创 2018-11-02 17:10:06 · 19788 阅读 · 2 评论 -
阻止拷贝的三种方法--Cpp
当一个对象是独一无二的时候,为这个对象做一个副本有点没道理,所以我们应阻止对它进行的拷贝,但是,阻止这一动作并不是很直观,通常来说,你不希望class的某一功能,只要不声明对应的函数就行了,但这个策略对拷贝构造函数和赋值操作符思是无效的,因为如果你不声明它们,编译器会替你声明一个默认的,那么该如何解决这个问题呢,通常来说,可以采取如下三种方法。将拷贝构造函数和赋值操作符声明为私有成员函数,并且...原创 2018-11-02 20:42:27 · 578 阅读 · 0 评论 -
为什么复制构造函数的参数必须是引用类型?
如果一个函数是通过值传递(pass by value)的话,那么它真正传递的其实是实参的副本,该副本产生必定会调用复制构造函数。那么,试想一下,如果我们的复制构造函数是通过值传递的话,它就会调用它本身来产生一个副本,就这样会无限递归下去,而如果传递引用,就不会产生副本,也不会调用复制构造函数,问题得以解决。...原创 2018-11-04 22:45:52 · 1572 阅读 · 1 评论