C/C++常见知识补充002
memset()函数与fill()函数
作用:给数组中每一个元素赋相同的值
1.memset()函数,头文件string.h,按字节赋值,建议只使用memset赋值0或-1。
//使用方式
memset(数组名,值,sizeof(数组名));
2.fill()函数,头文件algorithm,执行速度比memset函数慢,如果要对数组赋值其他数字(比如1)使用fill()函数。
//使用方式
fill(起始位置,结束位置的下一个位置,值);
例子:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[15];
int b[4][4];
int c[10];
void Print(){
//输出三个数组结果
for(int i=0;i<15;i++)
cout<<a[i]<<' ';
cout<<endl;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++)
cout<<b[i][j]<<' ';
cout<<endl;
}
for(int i=0;i<10;i++)
cout<<c[i]<<' ';
cout<<endl;
}
int main()
{
//使用memset()分别对a,b赋值
memset(a,0,sizeof(a));
memset(b,-1,sizeof(b));
memset(c,1,sizeof(c)); //赋值结果并不是1
//输出结果
cout<<"使用memset赋值结果"<<endl;
Print();
//使用fill()函数进行赋值
fill(a,a+10,5);
//fill(b,b+8,100);//只能用于一位数组
fill(c,c+10,1);
//输出结果
cout<<"使用fill()赋值结果"<<endl;
Print();
return 0;
}
运行结果:
使用memset赋值结果
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
使用fill()赋值结果
5 5 5 5 5 5 5 5 5 5 0 0 0 0 0
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
1 1 1 1 1 1 1 1 1 1
--------------------------------
string.h头文件下的常用函数
strlen(str); 得到字符串长度(字符数组中第一个’\0’前的字符个数)
strcmp(str1,str2);按照字典序比价两个字符串的大小
返回结果大于0,str1>str2
返回结果等于0,两个字符串相同
返回结果小于0,str1<str2
strcpy(str1,str2); 功能:str1=str2; //给字符串赋值
strcat(str1,str2); 功能:str1=str1+str2; //拼接功能
例子:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char str1[20]="Hello Tom";
char str2[20]="I am Jerry";
int len=strlen(str1);
cout<<"str1长度为:"<<len<<endl;
int cmp=strcmp(str1,str2);
cout<<"str1与str2字典序的比较结果:"<<cmp<<endl;
strcpy(str1,str2);
cout<<"赋值str2后str1的值为"<<str1<<endl;
strcat(str1,str2);
cout<<"将两个字符串拼接:"<<str1<<endl;
return 0;
}
结果:
str1长度为:9
str1与str2字典序的比较结果:-1
赋值str2后str1的值为I am Jerry
将两个字符串拼接:I am JerryI am Jerry
struct结构体变量
struct 定义的变量也能够定义构造函数,和类差不多
浮点数比较
浮点数在计算机中的存储并不总是精确的,在经过大量计算后,一个浮点型的数3.14在计算中可能存储成3.1400000000001,也有可能存储成3.1399999999999,在这种情况下会对比较带来干扰,因为C++中的“==”操作是完全相同才能判定为true。所以需要引入一个极小的esp来对这种误差进行修正。
经验表明,esp取10-8是一个合适的数字,对大多数情况下既不会漏判也不会误判。因此可以将esp定义为常量10-8。
const double esp=1e-8;
//用宏定义的形式判断a,b是否相等
#define Equ(a,b) ((fabs((a)-(b)))<(esp))
类似还有:
大于运算>: a-b>esp
小于运算<:a-b<-esp
大于等于运算>=:a-b>=-esp
小于等于运算<=:a-b<esp
黑盒测试
1.单电测试,测试系统会多次运行
2.多点测试,测试系统一般运行一次,每次有多组样例
多点测试一般需要用while结构
本文参考《算法笔记》(胡凡 曾磊 主编)机械工业出版社