C++ primer中有趣的东西
来源:互联网 发布:用java写九九乘法表 编辑:程序博客网 时间:2024/05/20 18:50
1. const : 不能修改的意思,分为顶层和底层。只有指针类型有顶层和底层两种,其他类型都只有一层。其中一般变量为顶层,而引用为底层。
- 顶层:自己不能动 const int *p=&i (指不能通过p改变i的值)
底层:自己指向的东西不能动 int * const p1=&i (指p1自己不能指向别的变量了,和引用一样被绑定了) - 其中顶层const变量可以赋值给一般变量,底层const变量只能赋值给相同的底层const的变量(防止其他变量偷偷修改底层的值),如:
int i=0;
const int ci=42;
i=ci; (正确,即使i修改值,这个值的存储空间和ci的不一样,不影响ci不能改变的事实)
const int *p=&ci;
int *p1=p;(错误,万一p1偷偷修改p的值,很难被发现,如果p1也是const,能保证p1不会修改值)
2. 迭代器 : 迭代器试图提供一个统一标准,让库算法能在更多的容器或者其他东西上运行。其中,比较有趣的输入输出流的迭代器,结合copy使用,很方便。例如:
- ostream_iterator<int> out(cout," ");
vector<int> v{1,2,3,4};
copy(v.begin(),v.end(),out);//输出: 1 2 3 4 - 值得注意的一点是,迭代器不会改变容器的大小,除了迭代器的适配器——插入迭代器。对于一般的数组,标准库中提供了begin()和end()函数,获取头指针和尾后指针。
4. 容器和容器适配器 :
- 顺序容器:vector, list(双链表), forward_list(单链表), deque(双端队列), array(固定大小数组), string
- 容器适配器(让一个东西的表现像另一个东西):stack, queue, priority_queue(优先队列)。一般前两个用deque实现,后一个用vector实现
- 关联容器 : map, multimap, set, multiset, unordered_map, unordered_set, unorder_multimap, unorder_multiset...前四个一般用平衡二叉树实现,后四个一般用哈希函数实现
5. 类 : 构造函数,析构函数,拷贝构造函数,拷贝赋值函数,移动构造函数,移动赋值函数
- 构造函数能完成隐式类型转换,拷贝构造函数在函数参数为值传递时和拷贝初始化时使用,在分配了动态内存的类中,后面5个函数一般是要定义的
6. Lambda : 一个未命名的类,定义了调用运算符 形式如:[捕获变量](参数列表)[optional ->(后置返回类型)]{函数体}
- 捕获变量为类的私有成员,由构造函数初始化
- 其他内容与调用运算符定义相同
- 如果函数体只有一条返回语句,则编译器可以识别返回类型。如果函数体不止有一条语句,且返回类型省略,编译器默认返回类型为void。
7. 智能指针 : 自己判断什么时候该销毁自己,把指针跟变量一样使用。
- shared_ptr : 该指针指向的变量,可以有多个指针共享。编译器能在最后一个指针无效时,释放变量内存
- unique_ptr : 独享变量指针。拥有权只能通过交接转换,变量不能共享。 release和reset函数
- weak_ptr :它的存在不影响指针的释放,指向一个shared_ptr变量。用lock成员函数判断,它指向的对象是否还有效
0 0
- C++ primer中有趣的东西
- Javascript有趣的东西
- 一些有趣的东西
- 有趣的地方,有趣的东西!
- 发现个有趣的东西
- C++ primer中有很多好玩的东西
- C中一个有趣的打印
- 【c】printf中有趣的%n
- C语言中有趣的printf
- 复数与矩阵,一个有趣的东西
- C# 4.0一些有趣的东西
- JS学习笔记-几个有趣的东西
- svn中很有趣的东西(不要忽视空格和空行的力量)
- linux c中需要记住的东西
- 有趣的C语言
- c的有趣问题
- C之有趣-数组中不改变次序的排名
- C++11 中一个很有趣的东西,Lambda表达式,称可调用对象,也叫函数对象。
- Unknown version of Tomcat was specified
- windows系统下安装python的pip工具
- 2017.3.2 53. Maximum Subarray
- 将网页保存为图片
- easymock快速入门
- C++ primer中有趣的东西
- MySql之表记录操作(增删改)
- 软素质学堂
- 九度OJ学习笔记 题目1070
- 新手上路
- mybatis延迟加载
- Django入门探索(二)
- Android仿微信聊天界面布局
- 数组填充 fillArray