using namespace
1 | using namespace |
形象通俗的讲,就是为了防止同文件中同变量名或函数名产生冲突,只要它们属于不同的名空间
const
1 | const int max_tries = 3 ; |
被定义为const的对象,在获得初值以后,无法再有任何改动。如果你企图为const对象指定新值,会产生编译错误,例如:
1 | max_tries = 41 ; //错误:这是个const对象 |
这一切的前提都是建立在c++基础上,在c中的const是伪常量,可以通过指针修改,c++里const无法通过指针修改(感谢Delort师傅的传授)
条件运算符 ‘?’ 和’:’
1 | const int line_size = 8 ; |
条件运算符的一般使用形式如下:
expr
? 如果expr 为 true , 就执行这里
: 如果expr 为 false , 就执行这里
如何判定 true 与 false呢,此例就是看上面条件表达式 是否为0,0为false,其余为true。
循环语句之switch
1 | switch( int number || char string) |
switch () 中表达式的值必须为整数或者字符串
表达式的值依次与case 进行比较,符合便执行该case,全没符合,如果有default,便开始执行default ,如果default也没有,就不执行任何操作
如果不在case后加上break,一旦在中间匹配到一个case进行,剩下的case全会依次执行!!!!!
Array和Vector 数组
Array :
- 必须指定元素类型,名称,大小
Array的大小必须是个常量表达式,也就是不需要在运行时求值的表达式,例如:
1 | const int seq_size = 18 ; |
- 支持统一赋值
Vector :
必须包含vector头文件
1
2
3
vector<int> pell_seq[seq_size] ;
此处的seq_size 不一定得是个常量表达式
不支持统一赋值
可以进行冗长的逐个赋值
或者利用已经初始化的Array作为Vector的初值
1
2
3
4
5
6
7
8
91. int elem_vals[seq_size] =
{
1, 2, 3, 4, 5
};
//以elem_vals的值来初始化elem_seq
vector<int> elem_seq( elem_vals, elem_vals+seq_size ) ;
还得注意一点,严禁off by one!!!!!!!!!!!!!!!!!!!!!!
off by one的危害,可以去另一篇buu刷题之旅查看
指针
指针的提领操作:
如果要访问一个由指针所指对象,得提领,也就是取得 “位于该指针所指内存地址上” 的对象。 在指针前用*
1 | int ival = 1024 ; |
注:
1 | pi ; //计算存放p1指针的地址里的内容 |
1 | *pi ; // 求ival的值 |
文件的读写
头文件
1 |
打开可供写入的文件
1 | ofstream outfile ( "文件名"); |
注: 此举会使文件中原有数据全部清空
追加模式写入文件(会写在文件末尾)
1 | ofstream outfile("文件名" , ios_base::app); |
读取文件
1 | ifstream infile("文件名"); |
注: 从开头开始读取
‘ ‘ & “ “
‘a’代表了字母a
“a”代表了一个字符数组,该数组包含两个字符: 1. a 2. ‘\x00’
a++ 与 ++a的稍许差别
a++ 与 ++a的稍许差别
对于a++,它先拷贝自己的副本,然后对真值+1。
对于++a,它只是在真值上+1/
如test1
a=1;
栈 | 运算式 | 真值 | 副本 |
---|---|---|---|
低位 | a++ | 7 | 6 |
++a | 6 | 无 | |
a++ | 5 | 4 | |
++a | 4 | 无 | |
a++ | 3 | 2 | |
高位 | ++a | 2 | 无 |
此时,a的真值为7,自低位输出,如有副本则输出副本,无副本输出现在a的真值7
结果: 6 7 4 7 2 7
(这里得感谢Delort师傅的文章)
构造函数
调用这个类的时候就会自动运行这个函数,进行的一些处理。
这个函数名必须和类名相同
构造函数独有写法:
1 | class complex |
这就是将r 和 i 赋值给re , im这两个变量