C++风格
1. 常量命名全部大写
2.
函数传参四种方式
1. 值传参
"函数接收到了传递过来的参数后,将其拷贝一份,其函数内部执行的代码操作的都是传递参数的拷贝。修改参数不会影响到传递过来的参数的值。"
double f1( double a, double b);
double z = f1( x, y );
2. 引用传参
“不拷贝,函数形参相当于是实参的别名,所以叫引用”
void swap ( double & a, double & b);
swap( x, y);
3. 常量引用传参
“不拷贝,不能修改”
void f3(const int & a);
4. 右值引用(右值:临时的变量、资源)
“不拷贝,直接接管临时变量的内存资源”
void f3(string && a);
(补充:std::move()的作用体现在哪呢?它的作用是把一个左值变成一个右值引用)
函数返回三种方式
1. 按值返回
“进行拷贝”
int f1(int a);
2. 按常量引用返回
“不拷贝,返回值不能修改,需要使用常量引用进行接收”
const int & f2(int b);
3. 按引用返回
“不拷贝,能够修改”
int & f3(int c)
成员函数声明为const
1. 被const声明的成员函数只能访问const修饰的成员变量
2. const成员函数只能访问,不能修改const修饰的成员变量
3. 非const成员函数可以访问任意的成员变量
4. 加上mutable修饰符的成员变量可以被任意成员修改
size_type与size_t含义
1. size_type用来描述字符串的长度大小(string)
2. size_type所定义的数据范围针对不同的机器平台是不同的,相当于是做了一层数据隔离
3. str.size() 返回 size_type
4. size_t 用于描述"二进制位"大小
5. sizeof() 返回size_t
bitset<32> bitvec;
size_t sz=bitvec.size();
6. size_t是全局定义的类型;size_type是STL类中定义的类型属性
7. size_t 使用的时候头文件需要 <cstddef> ;size_type 使用的时候需要<string>或者<vector>
8. 在用下标访问元素时,vector使用vector::size_type作为下标类型(size_type是容器概念,没有容器不能使用),而数组下标的正确类型则是size_t
tips
输出大量转移序列
cout << R"(c:\files\)";
使用exit(i)退出
#include <cstdlib>
exit(i)
UNIX 和 Windows系统,1表示错误,0表示正确
运算顺序
1. 优先级相同的一元运算符从右往左
2. 优先级相同的二元运算符从左往右
3. 运算符优先级
流操作
- 单纯文件流 ifstream/ofstream
#include <fstream>
#Include <cstdlib>
using namespace std;
ifstream inStream;
inStream.open("filename.txt");
if(inStream.fail())
{ exit(0) ;}
inStream.close();
- 文件流设置格式
outStream.setf(ios::fixed);
outStream.setf(ios::showpoints);
outStream.precision(2);
ios::fixed
ios::scientific
ios::showpoint
ios::right
ios::left
cout<<setw(4)
- 流作为函数实参必须是传引用的
- 包含默认实参与不包含实参,默认实参放在最后
- eof成员函数
inStream.eof()
- 预定义字符函数
#include <cctype>
char c = toupper('a');
cout << c;
toupper
tolower
isuppper
islower
isalpha
isdigit
isspace
数组
- 遍历
int arr[4]={2, 4, 6, 8};
for(int x: arr)
cout<<x<<"";
endl;
C字符串
- 使用操作符输入>>
char a[80];
cin>>a;
每次读取一个单词,遇到空格与换行符即停止
- getline
char a[80];
cin.getline(a, 80);
- C字符串转化
#include <cstdlib>
int x = atoi("888");
long y = atol("888");
double z = atof("888");
- 几个库函数
C++字符串
- 双引号字符串实际实际上是一个C字符串,之后构造string数据类型
#include <string>
string cc("ants");
- 均调用构造函数
string cc("ants");
string cc = "ants";
- 操作符包含 =、+
- 字符串输入
使用cin、>>读取单个单词,会忽略开始的空白字符,遇到空白字符即停止
使用getline读取一行输入
string line;
getline(cin, line); //停止条件,遇到换行符
getline(cin, line, '?'); //停止条件,遇到 '?'
- cin、>> 与 getline 混用问题
int n;
string line;
cin>>n;
getline(cin, line);
输入
42
Hello World
结果
line为空字符串
原因
(cin>>n)将行内剩下的东西留给后续的getline来读取。