目录

C入门输入输出缺省参数

C++入门——输入输出、缺省参数

C++入门——输入输出、缺省参数

一、C++标准库——命名空间 std

C++标准库std是一个命名空间,全称为"standard",其中包括标准模板库(STL),输入输出系统,文件系统库,智能指针与内存管理,字符串与文本处理等等,我们以输入输出流和标准模板库为例,简单地认识一下C++标准库里面有哪些内容:

1.输入输出系统

(1)流(Streams)
  • 基础流: iostreamcin , cout , cerr
  • 文件流: fstream , ifstream , ofstream
  • 字符串流: stringstream ,用于内存数据格式化
(2)格式化工具
  • std::format (C++20):类型安全字符串格式化
  • 本地化支持: localewcout (宽字符输出)

2.标准模板库(STL)

(1) 容器(Containers)
  • 序列容器: vector , list , deque , array (C++11)
  • 关联容器: map , set , unordered_map (C++11), unordered_set (C++11)
  • 适配器: stack , queue , priority_queue
(2) 算法(Algorithms)
  • 非修改序列操作: find , count , for_each
  • 修改序列操作: copy , transform , replace
  • 排序与搜索: sort , binary_search , lower_bound
(3) 迭代器(Iterators)
  • 五类迭代器:输入/输出、前向/双向/随机访问

  • 范围遍历:C++20引入 ranges:: 简化迭代操作

    在本期内容中,我们只需要认识一下输入输出流中iostream的cin,cout,完成一些简单的输入输出操作即可。

二、输入输出——cin / cout

我们先来看这样一段代码:

https://i-blog.csdnimg.cn/direct/7c17fb5b4af34a17b28a1a0b3d5d3eaa.png#pic_center

1.#include < iostream >

C++的输入输出需要包含头文件< iostream > ,并且展开命名空间std(C++标准库),刚才上面的内容中,我们已经介绍了cin/cout是包含在头文件< iostream >中,而< iostream >又包含在命名空间std中,在上期内容的讲解中,我们知道,想要使用命名空间里的内容,就需要展开命名空间或者指定访问命名空间。在这里,由于是平时学习的代码,内容不是很多,所以我们就直接展开命名空间,写起来比较方便,如果不展开命名空间,输入的内容就要就相对多一些,如图所示:

  • 使用域作用限定符指定访问命名空间中的内容:

    https://i-blog.csdnimg.cn/direct/c0579cbb77504cd89c39281670ac475a.png#pic_center

  • 使用using将命名空间的cout、endl成员引入:

    https://i-blog.csdnimg.cn/direct/c49a5d5303ff4220a16a3ebf00e1a4fd.png#pic_center

    我们来看下面一段代码:

    https://i-blog.csdnimg.cn/direct/618d85a5ac024009ba6502e34dd2e35d.png#pic_center

要注意的是,展开命名空间要写在头文件之后,这是规范的写法,符合顺序逻辑,也就是编译器的解析流程,这里不过多赘述。

2.cout与cin

(1)cout——标准输出流
  • 基础输出语法:

    cout << "Hello World";            // 输出字符串  
    cout << 10 << " is the answer";   // 链式输出(拼接不同类型)  
    
  • 数据类型支持

    cout 通过运算符重载支持所有内置类型:

int num = 2025;  
double pi = 3.1415926;  
bool flag = true;  
 
cout << num << endl;    // 输出:2025  
cout << pi << endl;     // 输出:3.14159(默认精度6位)  
cout << flag << endl;   // 输出:1(true为1,false为0)  

在这里,我们就不需要像printf那样使用%d,%f,%lf等来输出对应类型的值了,因为cout可以自行判断。当然,如果需要输出小数点后指定多少位,或者一个数字占多少位,这里就不是那么简单了,在这种情况下,还是使用printf输出比较方便,因为C++是兼容C的。

(2)cin——标准输入流
  • 头文件: #include <iostream>
  • 本质: cinstd::istream 类的全局实例,绑定标准输入设备(通常为键盘)
  • 缓冲机制:输入内容暂存于内存缓冲区,按需提取至变量
  • 基础数据读取
int age;  
double salary;  
cin >> age >> salary;  // 输入"30 85000.5"后,age=30, salary=85000.5  
  • 自动类型转换:将输入字符序列转换为目标类型数据;
  • 空格分隔:默认跳过前导空白,以空格/换行为数据分隔符;
  • 链式操作:支持连续提取多个变量。
总而言之,cin就相当于C语言中的scanf。
(3)endl——流操纵器
  • endl 是C++标准库中定义的流操纵器(Manipulator),其行为包含两个不可分割的原子操作:
    1. 换行输出:向输出流插入换行符 \n ,使后续输出从新行开始;
    1. 强制刷新:调用 flush() 方法,立即将流缓冲区内容写入目标设备(如控制台、文件、网络套接字)。
简单来讲,先将 endl 理解为 '\n' 即可。

3. « 流插入与 » 流提取

流插入运算符 <<
  • 流插入运算符 << 是C++中输出流操作的核心工具,其本质是 ostream 类中重载的运算符函数。通过该运算符,数据从内存对象流向输出设备(如控制台、文件、网络套接字)。

  • 什么是 控制台 ?黑框框就是:

    https://i-blog.csdnimg.cn/direct/0261df876f6a4c93a327d2d6cb24f5b2.png#pic_center

流提取运算符 >>
  • 流提取运算符 >> 是C++输入流( istream )的核心操作符,用于从输入源(如键盘、文件、网络)提取数据到变量。其本质是 istream 类中重载的运算符函数,遵循链式调用规则。

    如图所示: https://i-blog.csdnimg.cn/direct/769b370c67c542f1911a27ed0606b5e7.png#pic_center

    这里 >> 就是将键盘上输入的10提取出来,赋给变量a。

三、缺省参数

1.缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,举个简单的例子:

https://i-blog.csdnimg.cn/direct/9971a34c40e6424fa6866ec9a9967f03.png#pic_center

如图所示,Fun函数中提供了一个缺省参数a=1,也就是说,当我们没有传参的时候,它就会默认调用a=1,输出结果为1;如果传参了,比如这里传了一个10,那么就传什么输出什么。

2.缺省参数的分类

  • 全缺省参数

    如图所示:

    https://i-blog.csdnimg.cn/direct/73b8e98aaaad49bb9f054aaeee57a733.png#pic_center

    这里在函数定义中,三个参数都是缺省参数,还是这样的原则:没传参就使用缺省参数,如果传参那么就传什么输出什么,并且,这里是有顺序的,Fun(20)就是先把20传给a,b和c使用缺省参数;Fun(20,30)就是先传给a,b,c依然使用缺省参数。

  • 半缺省参数

    如图所示:

    https://i-blog.csdnimg.cn/direct/06e0fe29f6b14ac0b4461ce0ca2dbd3c.png

    需要注意的是,半缺省参数必须从右往左依次来给出,不能间隔着给,如图:

    https://i-blog.csdnimg.cn/direct/518eb728c048482187d686e15b6138dc.png#pic_center

    https://i-blog.csdnimg.cn/direct/2c81f5dc9f724bf49e197adc2c94c977.png#pic_center

    https://i-blog.csdnimg.cn/direct/77d225c69e19402e83d2da7eace907d6.png#pic_center

    https://i-blog.csdnimg.cn/direct/4de802fcae304d269b6f0a4bdb7d3e7e.png#pic_center

    前一个例子是缺省的两边,中间没有缺省参数;后一个是从左往右安排的缺省参数,这些都是不对的。

本期总结+下期预告

本期内容为大家详细介绍了C++的输入输出和缺省参数,下期内容将为大家带来函数重载和引用相关的知识!

感谢大家的关注,我们下期再见!

https://i-blog.csdnimg.cn/direct/58dbb05288b74ad6a6d443b7dd2401bb.png#pic_center