【学习笔记】C/C++
1. C语言中的 scanf() 函数
该函数包含在头文件 <stdio.h> 或者 <cstdio> (在C++中使用时)
函数的返回值指的是
所输入的数据与格式字符串匹配的次数。
意思就是该函数返回已成功赋值的数据项数,出错时返回 EOF (End_of_File,是一个预定义常量,表示文件末尾,值为-1)
简单示例:
#include <stdio.h> int main(void)
{
int a, b;
int input = scanf("%d %d", &a, &b);
printf("input = %d\n", input); return ;
}
此时输入
得到输出 input =
上述结果表示正确匹配,若出现错误,如输入 a
第二个值匹配失败,整型变量b无法得到字符‘a’,依旧是一个未赋值前不确定的值,则此时输出结果为 input =
总之,我们可通过函数scanf( )返回值,来检测输入格式的正确性。
2. C++类与对象
2.1 问题:我们需要将一个类的所有实例都保存在一个容器中,同时又不需要类的使用者进行其他的操作,该如何实现?
方法:在类中定义一个static类型的容器作为类的成员变量,构造对象时将对象的地址添加到容器中,析构时再将其从容器中删除。
#include <iostream>
#include <list>
#include <algorithm> using namespace std; class MyClass {
protected:
int value_;
public:
static list<MyClass*> instances_;
MyClass(int val);
~MyClass();
static void showList();
}; list<MyClass*> MyClass::instances_; MyClass::MyClass(int val) {
instances_.push_back(this);
value_ = val;
} MyClass::~MyClass() {
list<MyClass*>::iterator p =
find(instances_.begin(), instances_.end(), this);
if (p != instances_.end())
instances_.erase(p);
} void MyClass::showList() {
for (list<MyClass*>::iterator p = instances_.begin();
p != instances_.end(); ++p)
cout << (*p)->value_ << endl;
} int main(int argc, char **argv) {
MyClass a();
MyClass b();
MyClass c();
MyClass::showList(); // 输出的结果为1,10,100
return ;
}
3. 生成随机数序列
3.1 C语言中 rand() 函数用来产生随机数,但这不是真正意义上的随机数,是伪随机数。
它是以一个数(通常称为种子)为基准推算出来的一系列数,当这系列数很大时,就会服从正态公布,从而相当于产生了随机数。
当计算机正常开机后,这个种子的值是定了的,除非你破坏系统,才能改变这个种子的值。
C++提供了 std::srand() 函数,其原型是 void srand( int a) ,利用 srand((unsigned int) (time(NULL)) 是一种产生不可预见的随机序列的方法,因为每一次运行程序的时间是不同的。
3.2 以当前时间为参数重置随机数种子
如果没调用 srand() ,你会发现你每次运行程序, rand() 得到的序列值是不变的,然后 srand 里参数相同时 rand() 得到的序列也将相同。
std::srand(time(0)) 的作用就是让得到的序列看上去更贴近随机的概念。
等有空把遇到的错误和更标准的方法总结一下。
4. Lambda表达式
为何使用 Lambda ?
4.1 距离
很多人认为,让定义位于使用的附近很有用。这样就无需翻阅很多源代码,以了解函数。修改代码也很简单。
Lambda 表达式是不错的选择,而函数是不好的选择,因为不能内部定义其他函数,定义可能离使用的地方很远。函数符是个不错的选择,可以在函数内部定义类(包含函数符类)。
4.2 简洁
函数符代码要比l Lambda 代码更加繁琐,函数和 Lambda 的简洁程度相当。
4.3 效率
三种方法相对效率取决于编译器的内联。函数指针阻止了内联,因为编译器传统上不会内联其他地址被获取的函数,因为函数地址的概念意味着非内联函数。而函数符和 Lambda 通常不会阻止内联。
4.4 功能
Lambda 表达式可访问作用域内的任何动态变量,可以采用取值、引用的形式进行捕获。
参考资料
[1] c++随机数生成 http://blog.sina.com.cn/s/blog_79ab4be10100uzrj.html
[2] C++产生随机数一直重复的问题 https://www.csdn.net/gather_22/MtzakgzsMTUtYmxvZwO0O0OO0O0O.html
【学习笔记】C/C++的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- 大数据学习笔记——Java篇之IO
IO学习笔记整理 1. File类 1.1 File对象的三种创建方式: File对象是一个抽象的概念,只有被创建出来之后,文件或文件夹才会真正存在 注意:File对象想要创建成功,它的目录必须存在! ...
- 理解Vue中的nextTick
参考博客:https://www.jianshu.com/p/a7550c0e164f
- 上次阿里面试问到Redis主从复制原理,这次终于搞明白了!
1.前言 Redis单节点存在单点故障,为解决单点问题,需要对Redis节点配置从节点.使用哨兵来监听主节点存活状态,若主节点挂掉,从节点能继续提供缓存功能.从节点怎样和主节点间完成数据传递?就是Re ...
- go1.13 mod 实践和常见问题
实践建议 0,go mod 要求所有依赖的 import path 的path 以域名开头,如果现有项目转1.13的go mod 模式,且不是以域名开头则需要修改. eg: code.be.mingb ...
- 湖南大学第十四届ACM程序设计新生杯(重现赛)G a+b+c+d=? (16进制与LL范围)
链接:https://ac.nowcoder.com/acm/contest/338/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K6 ...
- pt-online-schema-change工具使用教程(在线修改大表结构)
percona-toolkit中pt-online-schema-change工具安装和使用 pt-online-schema-change介绍 使用场景:在线修改大表结构 在线数据库的维护中,总会涉 ...
- 深入理解Kafka必知必会(3)
Kafka中的事务是怎么实现的? Kafka中的事务可以使应用程序将消费消息.生产消息.提交消费位移当作原子操作来处理,同时成功或失败,即使该生产或消费会跨多个分区. 生产者必须提供唯一的transa ...
- vue-其他
vue-resource // 2.1 导入 vue-resource import VueResource from 'vue-resource' // 2.2 安装 vue-resource Vu ...
- Android4.4 RIL短信接收流程分析
最近有客户反馈Android接收不到短信,于是一头扎进RIL里面找原因.最后发现不是RIL的问题,而是BC72上报短信的格式不对,AT+CNMA=1无作用等几个小问题导致的.尽管问题不在RIL,但总算 ...
- Builder模式的目的是解耦构建过程,为什么要用内部类?
还没有看过Builder模式的作用,看过一篇介绍Builder模式的文章,这里是关于Builder模式的思考:思考是否有比新建一个内部类更好的方法,首先想到的是 package xyz.n490808 ...