1.C++标准库介绍
【1】C++是C的超集
- 一个典型C程序(后缀名.c)可以完全被视为C++程序来编译
- C程序可以通过
__cplusplus
符号是否预定义来判断当前是gcc还是g++编译__cplusplus
的值是long int
类型的,值表示当前编译程序的C++编译器的版本号。 - 一个典型C++程序(后缀名.cpp)只能当C++程序来编译,可见C++是C的超集
- C++文件名的常用后缀:源文件(.cpp .cxx .cc .c .c++),头文件(.hpp .hxx .h)
/* ----- a.c文件 ------ */
#include <stdio.h>
#ifdef __cplusplus
#define USECPP 1
#else
#define USECPP 0
#endif
int main(int argc, char const *argv[])
{
printf("USECPP = %d, __cplusplus = %ld\n",USECPP,__cplusplus);
return 0;
}
【2】C++完全接收并兼容了C库
- 典型C++程序中可以支持C的形式包含C库头文件,并直接使用C库API
- C++更建议的头文件包含形式不是
<stdio.h>
这样,而是<cstdio>
这样,C++的标准库的头文件是没有后缀名的 - ubuntu中gcc工具链的头文件在/usr/include中,可以实际看看
【3】C++标准库介绍
- C标准库即为C++标准库的一部分,完全继承并以C++方式重写,位于std命名空间中
- C++面向对象库,如string、iostream等,位于std命名空间中
- C++ STL标准模板库,如vector、map等,位于std命名空间中
2.iostream的cout使用
【1】基本使用
- cout即标准输出,对应stdout
- cout定义在std命名空间中,要按命名空间的三种使用方法来用
- 结合
<<
符号进行输出,可多节连接 - cout涉及的头文件有
<iostream> <iomanip> <bits/ios_base.h>
- cout本质上是ostream(iostream的派生类)的一个对象
- 流操作符
<<
本质上是左移运算符在iostream中的运算符重载
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int val = 18;
cout << "hello world" << "----" << val << endl;
return 0;
}
【2】流操作符的格式化实例
- cout现在主要用来输出调试信息,掌握主要用法和细节查询即可,不必去记。
#include <iostream>
#include <iomanip>
using namespace std;
int main(int argc, char const *argv[])
{
int val = 18, tmp = 19;
cout << val << endl;
cout << hex << "0x" << val << endl;
cout << val << endl; //还保持为16进制
cout << dec << val << endl; //又变成10进制
/*结论:hex,dec等符号算子就是iostream内部维护的状态变量,设置后一直保持那个状态,更改输出状态需要重新设置*/
double d = 12345.6789;
cout << d << endl;
cout << setprecision(5) << d <<endl; //保留几位小数,从数字最开始的一位开始数,而不是从小数点开始往后数
cout << setprecision(8) << d <<endl; //使用setprecision(n)需要包含<iomanip>
return 0;
}
3.iostream的cin使用
【1】基本使用
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int val1, val2;
cout << "please input num:" << endl;
cin >> val1 >> val2; //这里不要加endl,否则会报错
cout << "tow num are:" << val1 << " ---- " << val2 <<endl;
return 0;
}
【2】注意点
- cpp中输入的时候不要使用引用符&
- cin的输入会以空格为中断
4.C++用fstream读写文件
【1】fstream介绍
- fstream是C++标准库中面向对象库的一个,用于操作流式文件
- fstream本质上是一个class,提供file操作的一众方法
- C++查询参考网站1:英文版的,支持c++98,c++11
- C++查询参考网站2:中文版的,支持多个版本
【2】fstream使用举例
- API解析
//等号后面是默认参数,默认打开的文件为可读可写
void open( const char *filename,ios_base::openmode mode = ios_base::in|ios_base::out );
参数
filename - 要打开的文件名
mode - 指定打开模式。它是位掩码类型,定义下列常量:
常量 解释
常量 | 意义 |
---|---|
app | 每次写入前寻位到流结尾 |
binary | 以二进制模式打开 |
in | 为读打开 |
out | 为写打开 |
trunc | 在打开时舍弃流的内容 |
ate | 打开后立即寻位到流结尾 |
- fstream文件读写实例
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char const *argv[])
{
fstream fs; //定义一个fstream对象,用于后续操作
char data[100];
fs.open("1.txt",ios::app | ios::in | ios::out); //ios::app表示追加内容,当没有1.txt时也可以自动创建
if(!fs.is_open())
{
cout << "open 1.txt failed" << endl;
return 0;
}
else
{
cout << "open 1.txt success" << endl;
}
cout << "please inpu string:" << endl;
cin >> data; //用户输入字符存到数组中
fs << data; //数据写入fs对象
fs >> data; //将数据从文件中读取出来
cout << "file content is :" << data << endl; //打印读取的文件内容
fs.close();
return 0;
}
5.C++字符串string类使用
【1】C++式字符串的基本使用
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
string s1,s2,s3;
s1 = "abcttt";
s2 = "def";
s3 = s1 + s2;
cout << "the length of s1 is :" << s1.size() << endl;
cout << "the capatity of s1 is :" << s1.capacity() << endl;
cout << "s1.append(s2) = " << s1.append(s2) << endl;
cout << "s3 = " << s3 << endl;
cout << "s1 = " << s1 << " " << "s2 = " << s2 << endl;
s1.swap(s2);
cout << "s1 = " << s1 << " " << "s2 = " << s2 << endl;
return 0;
}
【2】C++字符串和C字符串的对比
- C语言严格说没有字符串的概念,C字符串其实就是字符数组或字符指针
- C++和之后的java等都有字符串,本质是一个class
- C++字符串的优势是标准库自带可用于字符串的各种处理算法和方法
- C++实际开发中建议使用C++字符串而不是沿用C式字符串