C++ 基础

C++ 主页 C++ 概述 C++ 环境设置 C++ 基本语法 C++ 注释 C++ Hello World C++ 省略命名空间 C++ 标记 C++ 常量/字面量 C++ 关键字 C++ 标识符 C++ 数据类型 C++ 数字数据类型 C++ 字符数据类型 C++ 布尔数据类型 C++ 变量类型 C++ 变量作用域 C++ 多变量 C++ 基本输入/输出 C++ 修饰符类型 C++ 存储类 C++ 数字 C++ 枚举 C++ 枚举类 C++ 引用 C++ 日期和时间

C++ 运算符

C++ 运算符 C++ 算术运算符 C++ 关系运算符 C++ 逻辑运算符 C++ 位运算符 C++ 赋值运算符 C++ sizeof 运算符 C++ 条件运算符 C++ 逗号运算符 C++ 成员运算符 C++ 强制类型转换运算符 C++ 指针运算符 C++ 运算符优先级 C++ 一元运算符

C++ 控制语句

C++ 决策语句 C++ if 语句 C++ if else 语句 C++ 嵌套 if 语句 C++ switch 语句 C++ 嵌套 switch语句 C++ 循环类型 C++ while 循环 C++ for 循环 C++ do while 循环 C++ Foreach 循环 C++ 嵌套循环 C++ break 语句 C++ continue 语句 C++ goto 语句

C++ 字符串

C++ 字符串 C++ 循环遍历字符串 C++ 字符串长度 C++ 字符串连接 C++ 字符串比较

C++ 函数

C++ 函数 C++ 多函数参数 C++ 递归函数 C++ 返回值 C++ 函数重载 C++ 函数重写 C++ 默认参数

C++ 数组

C++ 数组 C++ 多维数组 C++ 指向数组的指针 C++ 将数组传递给函数 C++ 从函数返回数组

C++ 结构 &联合

C++ 结构 C++ 联合

C++ 指针

C++ 指针 C++ 解引用 C++ 修改指针

C++ 类和对象

C++ 面向对象 C++ 类 &对象 C++ 类成员函数 C++ 类访问修饰符 C++ 静态类成员 C++ 静态数据成员 C++ 静态成员函数 C++ 内联函数 C++ this 指针 C++ 友元函数 C++ 指向类的指针

C++ 构造函数

C++ 构造函数 &析构函数 C++ 默认构造函数 C++ 参数化构造函数 C++ 复制构造函数 C++ 构造函数重载 C++ 带默认参数的构造函数 C++ 委托构造函数 C++ 构造函数初始化列表 C++ 使用构造函数动态初始化

C++ 继承

C++ 继承 C++ 多重继承 C++ 多级继承

C++ 面向对象

C++ 重载 C++ 多态性 C++ 抽象 C++ 封装 C++ 接口 C++ 虚函数 C++ 纯虚函数与抽象类

C++ 文件处理

C++ 文件和流 C++ 文件读取

C++ 进阶

C++ 异常处理 C++ 动态内存 C++ 命名空间 C++ 模板 C++ 预处理器 C++ 信号处理 C++ 多线程 C++ Web 编程 C++ 套接字编程 C++ 并发 C++ 高级概念 C++ Lambda 表达式 C++ unordered_multiset

C++ 实用资源

C++ 问答 C++ 快速指南 C++ 速查表 C++ STL 教程 C++ 标准库 C++ 实用资源 C++ 讨论


C++ 基本输入/输出

C++ 标准库提供了丰富的输入/输出功能,我们将在后续章节中介绍。本章将讨论 C++ 编程所需的最基本和最常见的 I/O 操作。

C++ I/O 以流(字节序列)的形式进行。如果字节从键盘、磁盘驱动器或网络连接等设备流向主存,这称为输入操作;如果字节从主存流向显示屏、打印机、磁盘驱动器或网络连接等设备,这称为输出操作

I/O 库头文件

以下头文件对 C++ 程序很重要 -

Sr.No 头文件 &函数和说明
1

<iostream>

此文件定义了cinclogclog对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。

2

<iomanip>

此文件声明了用于执行格式化 I/O 的服务,这些服务使用所谓的参数化流操作符,例如 setwsetprecision

3

<fstream>

此文件声明了用户控制文件处理的服务。我们将在"文件和流"相关章节中详细讨论它。

4

<bits/stdc++.h>

此头文件包含大多数标准 C++ 库,无需单独指定每个库即可添加各种功能。这在编程竞赛中尤其有用。

标准输出流 (cout)

预定义对象 coutostream 类的一个实例。cout 对象被称为"连接到"标准输出设备,通常是显示屏。cout 与流插入运算符结合使用,该运算符写为 <<,即两个小于号,如下例所示。

示例

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Hello C++";
 
   cout << "Value of str is : " << str << endl;
}

当编译并执行上述代码时,它会产生以下结果 -

Value of str is : Hello C++

C++ 编译器还会确定要输出变量的数据类型,并选择合适的流插入运算符来显示值。<< 运算符可重载,用于输出内置类型(整数、浮点数、双精度数、字符串和指针值)的数据项。

插入运算符 << 可以在单个语句中多次使用,如上所示,endl 用于在行尾添加换行符。

标准输入流 (cin)

预定义对象 cinistream 类的一个实例。cin 对象连接到标准输入设备,通常是键盘。cin 与流提取运算符结合使用,后者写作 >>,即两个大于号,如下例所示。

示例

#include <iostream>
 
using namespace std;
 
int main() {
   char name[50];
 
   cout << "Please enter your name: ";
   cin >> name;
   cout << "Your name is: " << name << endl;
 
}

当上述代码编译并执行时,它会提示您输入一个名称。您输入一个值,然后按回车键,即可看到以下结果:

Please enter your name: cplusplus
Your name is: cplusplus

C++ 编译器还会判断输入值的数据类型,并选择合适的流提取运算符来提取该值并将其存储在给定的变量中。

流提取运算符 >> 可以在单个语句中多次使用。要请求多个数据,可以使用以下命令:

cin >> name >> age;

这等同于以下两个语句:

cin >> name;
cin >> age;

标准错误流 (cerr)

预定义对象 cerrostream 类的一个实例。 cerr 对象据说被附加到标准错误设备,该设备也是一个显示屏,但 cerr 对象没有缓冲,每次向 cerr 插入流都会立即显示其输出。

cerr 也可以与流插入运算符结合使用,如下例所示。

示例

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   cerr << "Error message : " << str << endl;
}

当编译并执行上述代码时,它会产生以下结果 -

Error message : Unable to read....

标准日志流 (clog)

预定义对象 clogostream 类的一个实例。clog 对象被附加到标准错误设备,该设备也是一个显示屏,但 clog 对象是缓冲的。这意味着每次向 clog 插入数据都会导致其输出被保留在缓冲区中,直到缓冲区填满或缓冲区刷新为止。

clog 也可以与流插入运算符结合使用,如下例所示。

示例

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   clog << "Error message : " << str << endl;
}

当编译并执行上述代码时,它会产生以下结果 -

Error message : Unable to read....

通过这些小例子,您可能无法看出 cout、cerr 和 clog 之间的区别,但在编写和执行大型程序时,这种区别就显而易见了。因此,建议使用 cerr 流显示错误消息,而显示其他日志消息时则应使用 clog。

使用 bit/stdc++ 进行输入/输出

bits/stdc++.h 是 C++ 中的非标准头文件,因为它不属于官方 C++ 标准库。相反,它是一个 GCC 特定的头文件,包含了 C++ 中的大多数标准库。您也可以使用 bit/stdc++.h 进行输入和输出,而无需使用其他库。

示例

#include <bits/stdc++.h>
using namespace std;
int main() {
  int number;
  string name;

  // #include <iostream>
  // #include <string>
  cout << "Welcome to TutorialsPoint!" << endl;

  // 输入用户姓名和号码
  cout << "Please enter your name: ";
  cin >> name;
  cout << "Please enter a number: ";
  cin >> number;
  cout << "Hello," << name << " You entered " << number << endl;

  // 演示一些 STL 特性
  // #include <vector>
  vector<int> numbers;
  cout << "Enter 4 numbers: ";

  for (int i = 0; i < 4; ++i) {
    int temp;
    cin >> temp;
    numbers.push_back(temp);
  }
  cout << "You entered the following numbers: ";
  for (int num : numbers) {
    cout << num << " ";
  }
  cout << endl;

  // 排序并显示数字
  // #include <algorithm>
  sort(numbers.begin(), numbers.end());
  cout << "Sorted numbers: ";
  for (int num : numbers) {
    cout << num << " ";
  }
  cout << endl;

  return 0;
}

当编译并执行上述代码时,它会产生以下结果 -

Welcome to TutorialsPoint!
Please enter your name: Aman
Please enter a number: 2006
Hello, Aman You 2006
Enter 4 numbers: 2
0
0
6
You entered the following numbers: 2 0 0 6 
Sorted numbers: 0 0 2 6

因此,我们无需使用诸如

  • #include <iostream>
  • #include <string>
  • #include <vector>
  • #include <algorithm>

我们直接使用了 <bits/stdc++.h> ,因为它包含了输入/输出操作、字符串处理、动态数组和算法所需的所有标准库,从而简化了代码,使其更简洁、更方便。它尤其适用于竞技编程。