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++的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 【算法随记六】一段Matlab版本的Total Variation(TV)去噪算法的C语言翻译。

    最近看到一篇文章讲IMAGE DECOMPOSITION,里面提到了将图像分为Texture layer和Structure layer,测试了很多方法,对于那些具有非常强烈纹理的图像,总觉得用TV去 ...

  2. Python3 函数进阶2

    目录 迭代器 可迭代对象 迭代器对象 总结和补充 列表推导式 字典生成式 zip()函数 递归 迭代器 迭代器是访问容器类数据类型元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从容器 ...

  3. ubuntu远程桌面软件vnc。

    http://www.linuxidc.com/Linux/2017-03/141936.htm 现在Linux是非常火的  很多人喜欢用它,界面简单,操作容易,有很多图形化工具如WinSCP可以与U ...

  4. 《Java练习题》进阶练习题(三)

    编程合集: https://www.cnblogs.com/jssj/p/12002760.html 前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序68 ...

  5. SpringBoot内容聚合

    分类整理一些内容,方便需要时回过头来看,整理不易,如有疏漏,请多担待!之后要查看这篇文章,公众号后台回复 “Springboot聚合” SpringBoot+Mybatis多模块(module)项目搭 ...

  6. Python爬虫基础面试题,为2020年初就业做准备

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:qiaoziheng 一.题目部分1.python中常用的数据结构有哪些 ...

  7. IT兄弟连 HTML5教程 CSS3属性特效 2D变换2

    3  scale() 方法 通过scale() 方法,元素的尺寸会增加或减少,根据给定的宽度(X轴)和高度(Y轴)参数.缩放scale()函数让元素根据中心原点对对象进行缩放.默认值是1,因此0.01 ...

  8. 【ftp服务】ftp登陆报错530 Login incorrect. Login failed.

    ftp登陆时报错,530 Login incorrect.Login failed.1.cat /etc/passwd,查看你登陆的账户主目录和登陆shell对应的是什么,我的是/sbin/nolog ...

  9. 【zabbix监控】zabbix监控tomcat服务

    服务器配置(zabbix_server) 1. 安装jdk 版本需要1.7以上,我这边安装的是1.8的,可以参考我jdk安装的文章 # 上传到zabbix_server服务端.安装(jdk-8u171 ...

  10. Python高级特性——列表生成式(list Comprehensions)

    List Comprehensions 即列表生成式,是Python内置的强大的用来生成列表list的生成式. 简单菜: >>> l = list(range(2,13)) > ...