【C++初阶(一)】学习前言 命名空间与IO流
本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。
💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识
C++初阶(一)
- 什么是C++
- C++发展史
- C++现状:
- C++在工作领域中的应用
- C++入门部分
- C++关键字:
- 命名空间:
- 命名空间定义:
- 命名空间的使用:
- 方法一:加命名空间名称及作用域限定符(不展开命名空间)
- 方法二:使用using将命名空间中某个成员引入(展开空间中部分内容)
- 方法三:使用using namespace 命名空间名称 引入(展开空间中全部内容)
- 对命名空间展开的思考
- C++输入与输出:
- cout(标准输出对象(控制台))
- cin(标准输入对象(键盘))
什么是C++
C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
C++发展史
1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。
我们先来看下C++的历史版本:

现在公司主流使用还是C++98和C++11。
关于C++2X最新特性的讨论:
https://zhuanlan.zhihu.com/p/107360459
C++现状:
C/C++在TIOBE编程语言社区
常年位居前五
在23年更是霸榜前三!

C++在工作领域中的应用
- 操作系统以及大型系统软件开发
- 服务器端开发
- 游戏开发
- 嵌入式和物联网领域
- 数字图像处理
- 人工智能
- 分布式应用
C++入门部分
C++关键字:
C++总计63个关键字,C语言32个关键字。

命名空间:
在介绍命名空间之前,先看下面代码所示:
#include<stdio.h>int rand = 10;int main()
{printf("%d", rand);return 0;
}
这个代码很简单,实现的功能就是打印rand函数的值。(这里赋值为10.并且以全局变量定义)
那我们在这个代码实现的基础上加一个头文件:
#include<stdlib.h>
也就是说:
#include<stdio.h>
#include<stdlib.h>int rand = 10;int main()
{printf("%d", rand);return 0;
}
我们看一下在编译器中运行的结果:

加了个头文件后,编译器报错了,这是为什么呢?
我们看报错原因:说是rand函数重定义。这是因为在库中已经有了rand这个函数,如果再次使用rand这个名字定义变量或者函数时,编译器会分不清你到底想使用哪个rand,因而报错。
那么如何解决这个问题呢?
这就是我们要首先介绍的命名空间。
C++为了解决C语言上述的问题
引出了命名空间这种玩法
(C++兼容C语言的所有语法)
命名空间定义:
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
//NIC是命名空间的名字,一般开发中是用项目名字做命名空间名。
namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};
}
命名空间相当于一个独立的作用域
命名空间中所有内容都局限于该命名空间中

当然,命名空间也可以嵌套:
namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};//命名空间的嵌套:namespace NIC2{int a;int b;int sum(int x, int y){return x + y;}struct Student{int ID;char Name[20];};}
}
命名空间的使用:
那么我们回到我们最初的那个问题,既然我们现在知道了是函数冲突产生的问题,并且用命名空间解决,那么如何使用呢?
先看下面代码示例:
int main()
{printf("%d", NIC::rand);return 0;
}
我们刚才把rand函数包装在了我们的命名空间里,这里我们要打印rand的值,采用了命名空间名+::的形式,这就是使用命名空间的第一种方法:加命名空间名称及作用域限定符。
方法一:加命名空间名称及作用域限定符(不展开命名空间)
:: 域作用限定符。
通过域作用符我们就可以访问命名空间中的成员:
int main()
{printf("%d\n", NIC::rand);int b = NIC::Add(1, 3);printf("%d", b);struct NIC::Test node;return 0;
}
结果显示:

这个代码示例我们访问了我们命名空间里面的rand和Add函数。最后一个我们开辟了结构体的新节点。
方法二:使用using将命名空间中某个成员引入(展开空间中部分内容)
假设NIC空间中的rand使用频率很高
可以将rand变量单独展开到全局域
using NIC::rand;
假设NIC空间中的Add函数使用频率很高
可以将Add函数单独展开到全局域
using NIC::Add;
看一下测试代码:
using NIC::rand;
int main()
{int b = rand;//rand展开直接用int c = NIC::Add(3, 5);//Add没有展开,需要用域作用符::访问printf("%d\n%d", b, c);return 0;
}
结果如下:

方法三:使用using namespace 命名空间名称 引入(展开空间中全部内容)
在空间NIC后面加上
using namespace NEO;
这句话的意思是:
将空间NIC展开为全局域
我们在看C++程序时经常看见:
using namespace std;
std就是C++的标准库。
当NIC空间被展开后
空间里的所有内容可以直接使用:
namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};//命名空间的嵌套:namespace NIC2{int a;int b;int sum(int x, int y){return x + y;}struct Student{int ID;char Name[20];};}
}using namespace NIC;
int main()
{int b = rand;printf("%d", b);return 0;
}
结果如下:

对命名空间展开的思考
假设我们将自定义NIC空间和标准库的std空间同时展开
那么整型变量rand和rand函数同时暴露在全局域
我们再去使用它时也会报错:
using namespace std;
using namespace NIC;
所以直接展开std标准库也有冲突风险
但是不展开的话,写输入输出会很麻烦
那么平时写代码时应该怎么办?
结论:
1.写项目时,尽量不要展开标准库
2.日常练习时应该展开标准库
3.写项目使用部分常用内容展开
C++输入与输出:
C语言输入输出方式,相信大家都并不陌生,那么C++如何输入输出呢?
在C++中,输入输出用的是IO流,跟C语言一样,在使用C++输入输出前要包含一个头文件:
#include<iostream>
其次,因为输入输出函数直接在库里面,我们可以直接展开std库也可以访问std库。
using namespace std;
using std::cout
using std::cin
using std::endl
具体用什么方式应人而异,根据自己习惯选择。
cout(标准输出对象(控制台))
C++中用:cout<< 来进行打印输出。(console:控制台 out:输出)
<<:流插入运算符
using std::cout;
int main()
{cout << "hello world\n";return 0;
}
输出结果:

从代码示例,我们可以理解为:hello word字符串就是流,流向到对象(终端)中去,进行打印输出。
补充1:
在C语言中,根据类型不同,我们用printf函数打印的时候,需要指定格式才能打印:
int main()
{int a = 10;double b = 5.5;printf("%d %.2lf", a, b);return 0;
}
但是我们C++中,会自动识别类型:
using std::cout;
int main()
{cout << "hello world\n";int a = 10;double b = 5.5;cout << a<<"\n";cout << b;return 0;
}
输出结果:

不仅如此:打印的时候我们可以多次用<<流插入运算符。
using std::cout;
int main()
{cout << "hello world\n";int a = 10;double b = 5.5;cout << a<<"\n"<<b<<"\n"<<"hello world\n"<<'\n';return 0;
}
输出结果:

补充2:
在C++中,我们可以用endl来表示换行符。(end:结尾 Line:行)
int main()
{// IO流// 自动识别输出变量的类型// <<流插入std::cout << "hello world\n";int a = 10;double b = 11.11;//std::cout << a << "\n";//std::cout << b << "\n";std::cout << a << "\n" << b << '\n';std::cout << a << std::endl << b << std::endl;return 0;
}
输出结果:

cin(标准输入对象(键盘))
C++中用:cin>>来进行获取键盘输入。(console:控制台 in:里面)
<<:流提取运算符
using std::cin;
using std::cout;
using std::endl;
int main()
{int a;double b;// 流提取cin >> a >> b;cout << a << endl << b << endl;cout << a << endl << b << endl;return 0;
}
输出结果:

注意:关于cout和cin还有很多更复杂的用法,比如控制浮点数输出精度,控制整形输出进制格式等等。因为C++兼容C语言的用法,这些又用得不是很多,我们这里就不展开学习了。后续如果有需要,我
们可以进行网上查阅并仔细学习。
相关文章:
【C++初阶(一)】学习前言 命名空间与IO流
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
flask vue跨域问题
问题: 调试时候跨域访问报: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法: 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…...
stm32(二十)IAP升级优化(双缓存,可恢复)
这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能, 主要记录一下自己的思路,无代码,实在是代码感觉没啥写的,都是一些网上很多流传的东西。 1、开发环境 Keilstm32f103JLINK 2、程序思路 在升级中,必…...
HDLbits:Exams/ece241 2013 q4
本题是一个实际的应用问题,一个水库,有三个传感器S1、S2、S3提供输入,经过控制电路,四个输出给到四个流量阀。也就是说,本题想让我们根据水位去控制流量阀。 问题的关键在于把什么抽象成state,答案是&…...
什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
Response Status Code 301、302
目录 Information Django redirect Influence Information HTTP状态码301、302和304分别表示以下情况: codeinformation301(Moved Permanently) 永久重定向。当请求的资源已经被永久地移动到了一个新的URI时,服务器会返回这个…...
import { ref, onMounted, reactive } from ‘vue‘
ref, onMounted, reactive 用于创建和操作响应式数据、生命周期钩子。 1.ref 用来创建一个响应式的引用(Reactive Reference)的函数,主要用于创建基本数据类型(如数字、字符串等)的响应式数据。 通过 ref 创建的变…...
【TB作品】基于MSP430G2553单片机的超声波测距与报警系统,原理图,PCB
功能: 1 超声波测距显示 2 按键设置报警上下限 3 蜂鸣器报警 原理图: PCB样式: 实物: 代码: https://github.com/xddun/blog_code_search...
npm install报错
在命令提示符窗口下载npm,报错如下: $npm install报错信息如下: npm WARN old lockfile npm WARN old lockfile The package-lock.json file was created with an old version of npm, npm WARN old lockfile so supplemental metadata must…...
Flutter自定义model实体类
在某些场景下,我们可能需要自定义Flutter model实体类,来创建更加结构化和有组织的代码,提高代码的可重用性,并增强Flutter应用程序的整体可维护性。 自定义小部件:在创建自己的小部件时,可能需要定义自定义数据类型来…...
java项目实现不停服更新的4种方案(InsCode AI 创作助手)
文章目录 1. Blue-Green 部署2. 滚动更新3. 使用负载均衡器4. 灰度发布 在软件开发和维护中,不停机更新是确保应用程序持续可用的关键任务之一。以下是四种常见的不停机更新策略及其示例: 1. Blue-Green 部署 概念: Blue-Green 部署是一种部…...
7.1 yolov5优化模型时,自动标注xml数据
yolov5优化模型时,一般需要继续标注一些检测错误的图片,将其标为xml数据。以下是根据训练好的模型自动标注xml数据的python代码: 注意:代码中包含了本人的yolov5的测试过程,测试过程可以自己根据yolov5的测试文件自行…...
开发者职场“生存状态”大调研报告分析 - 第一版
听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…...
在MySQL中使用!=还能走索引吗?
在MySQL中使用!还能走索引吗? 一般情况下,我们会在一个索引上较多的使用等值查询或者范围查询,此时索引大多可以帮助我们极快的查询出我们需要的数据。 那当我们在where条件中对索引列使用!查询,索引还能发挥他的作用吗…...
【算法题】2897. 对数组执行操作使平方和最大
题目: 给你一个下标从 0 开始的整数数组 nums 和一个 正 整数 k 。 你可以对数组执行以下操作 任意次 : 选择两个互不相同的下标 i 和 j ,同时 将 nums[i] 更新为 (nums[i] AND nums[j]) 且将 nums[j] 更新为 (nums[i] OR nums[j]) &#…...
2023年中国划船机产量、销量及市场规模分析[图]
划船机是一种健身器材,它模拟了划船的运动,可以锻炼身体的肌肉力量和协调性。划船机通常由座椅、把手、脚踏板和传动装置组成,使用者可以通过拉动把手来模拟划船的动作,从而达到锻炼身体的目的。 划船机产业链 资料来源ÿ…...
Kafka和RabbitMQ的对比
Rabbitmq比kafka可靠,kafka更适合IO高吞吐的处理,比如ELK日志收集 Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。 a) 以下场景比较适合使用Kafka。如果有大量的事…...
ffmpeg从一个视频中提取音频
ffmpeg -i ~/video/video.mp4 -vn -acodec copy ~/video/audioFile.m4a 从video.mp4中提取音频到文件audioFile.m4a中 查看提取的音频文件 ffprobe ~/video/audioFile.m4a...
CCF CSP题解:坐标变换(其一)(202309-1)
链接 OJ链接:传送门 AC代码 #include <iostream>using namespace std;int n, m;int dx 0, dy 0;int main() {cin >> n >> m;for (int i 0; i < n; i) {int x, y;cin >> x >> y;dx x;dy y;}for (int i 0; i < m; i) {i…...
跳表C语言
【C语言】算法学习跳表_c语言跳表-CSDN博客 leetcode原题,代码如下 #define MAX(a, b) ((a) > (b) ? (a) : (b)) const int MAX_LEVEL 32; const int P_FACTOR RAND_MAX >> 2;typedef struct SkiplistNode {int val;int maxLevel;struct SkiplistNode…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
