学习了一段时间的C++,慢慢发现整理出来了一些零零散散的小常识。
`std::cin >> x1 >> x2 >> x3;` 输入三个以空格键分隔开的数值分别赋给 x1, x2, x3, 并按回车键结束。
int i(1), j(1); <=> int i(1), j(1);
i += 8; <=> i = i + 8;
C++内部用1表示true, 哦表示false。在控制台显示一个布尔变量,若其值,若其值为true,则打印1;若其值为false,则打印0。
在C++中将一个数值复制给bool型变量,任意非零值会得到true,只有0会得到false。
德·摩根定律:
!(condition1 && condition2) <=> !condition1 || !condition2
!(condition1 || condition2) <=> !condition1 && !condition2
对于(x
简单文件输入输出
为了向一个文件写入数据,首先需创建一个 ofstram 类型的对象:ofstream output;
为了指定要写入的文件,需调用output 对象的 open 函数:
output.open(”xxx.txt”); 会创建一个名为 xxx.txt 的文件。若文件已经存在,其内容会被销毁,并创建一个新的文件。
为了从一个文件读取数据,首先要声明一个ifstream 类型的变量; ifstream input。
指定要读取的文件:input.open(”xxx.txt”);
检测文尾:input.eof();
参数传递方式
按值方式传递参数:当调用一个带参数的函数时,实参的值被传递给形参。无论函数中形参的值如何改变,实参变量的值都不会受影响。
按引用方式传递参数:一个标量实际上是另一个变量的一个别名,任何对引用变量的改变实际上都会作用到原变量上;
引用方式:将函数的形参声明为引用变量形式,调用时传递一个常规变量。当改变变量(形参)的值时,原变量的值也会改变。
使用按引用方式时:形参和实参的类型必须是相同的。
函数重载:即在同一个程序文件内存在两个或两个以上的有相同名字的函数,但参数列表不同。C++编译器会根据函数签名来决定使用哪个函数。
一般地:a + rand()%b 返回一个 a ~ a + b 之间的值(不包含a+b)
给定任意两个字符 ch1 和 ch2 (ch1 < ch2), 生成两者之间的一个随机字符:static_cast(ch1 + rand()%(ch2 - ch1 +1));
当一个函数结束执行后,其所有局部变量都会被销毁。
在程序的整个生命周期中,静态局部变量会一直驻留在内存中。静态局部变量的声明使用关键字:static.
内联函数:避免函数调用的开销。内联函数是不会被调用的,实际上,编译器会将其代码复制到每个调用点上。关键字:inline。
传递一个数组意味着数组的起始地址被传递给形参。函数内形参引用的就是传递给函数的那个数组。编译器并未创建新的数组。(引用方式)
为了防止函数意外地改变了数组的值,可以在数组参数前加上关键字const,告知编译器数组是不允许修改的。
二分法搜索方法:要求数组中的元素必须是有序存放的;首先将关键字与位于数组中央的元素进行比较,比较结果有三种:
若关键字<中央元素,继续搜索前半部分;
若关键字=中央元素,则找到匹配元素,搜索结束;
若关键字>中央元素,继续搜索后半部分;
每经过一次搜索,二分搜索法会将搜索范围缩小一半。
指针与C字符串
指针变量:用来保存内存地址,即指针变量的值是内存地址。
简接引用:通过指针引用某个值。
C++允许对指针加/减一个数,效果是指针包含的地址值被增加/减少,变化得量是该整数乘以指针指向的元素的大小。
一个数组实际上就是一个指针,而指向一个数组的指针可以像数组一样使用,甚至可以对指针使用下标变量。
将一个数组的地址赋予一个指针是不需要使用地址运算符(&)的,因为数组名就是表示数组的起始地址。
int *plist = &list[0]; <=> int *list = list;
即数组可以当做指针使用,指针可以当做数组使用。
使用const 声明的常量指针,其声明初始化必须在同一条语句中,在后面的程序中不能为其赋予新的地址。但指针指向的数据不是常量,是可以改变的。
double * const plist = &r;
const double *const p = &d;//指针和指向的数据都是常量
const double *p = &d; //指针不是常量,但其指向的数据是常量
double *const p = &d;//指针是常量,但其指向的数据不是常量
//指向常量的常量指针
const T *const cpct1 = pt;
T const *const cpct2 = cpct1;
值得注意的是,使用一个引用通常比使用一个常量指针更简单
const T &rct = *pt;
T &rt = *pt;