一、fill 填充
·头文件:#include < algorithm >
·作用:填充数组或者容器以你想要的内容
·写法 fill(arr+start,arr+end,num);
fill(myvector.begin(), myvector.end() , num);
例子: int a[100]={0}; fill(a+2,a+10,5);
这样数组a就会变成 0 0 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0……
int main()
{
int a[100]={0}; fill(a+2,a+10,5);
for(int i=0;i<100;i++)
{
printf("%d ",a[i]);
}
return 0;
}
二、next_permutation 全排列
·头文件: #include < algorithm >
·用法 next_permutation(arr,arr+size);
·作用:产生该数组的下一全排列
int main()
{
int n=4;
int a[4]={0};
for(int i=0;i<n;i++)a[i]=i;
while(next_permutation(a,a+n)){
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}//产生该数组的下一全排列
return 0;
}
/*如果有相同的数字,不会出现重复的排列。
它也能为字符串排列,都是按照字典序排序的,因为char类型是以unsigned_int类型储存的*/
三、sprintf()函数的使用
sprintf的作用是将一个格式化的字符串输出到一个目的字符串中
int main()
{
char buffer[80];
//一定要在调用sprintf之前分配足够大的空间。
sprintf(buffer, "An approximation ofPi is %f\n", M_PI);
puts(buffer);
return 0;
}
spritnf 在大多数场合可以替代itoa
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
//可以指定宽度,不足的左边补空格:
sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
//当然也可以左对齐:
sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"
//也可以按照16 进制打印:
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐
/*打印16 进制内容时,通常想要一种左边补0的等宽格式,
在表示宽度的数字前面加个0就可以了。*/
sprintf(s, "%08X", 4567); //产生:"000011D7"
//以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式
连接字符串
sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连 接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时 在它们中间插入别的内容,总之非常灵活)。
int main()
{
char s[50];
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "
puts(s);
return 0;
}
如何解决非法内存操作
int main()
{
char s[50];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(s, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"
puts(s);
/*这可以类比打印浮点数的”%m.nf”,在”%m.ns”中,m 表示占用宽度
n 才表示从相应的字符串中最多取用的字符数。通常在打印字
符串时m 没什么大用,还是点号后面的n 用的多。*/
return 0;
}
例子:产生10 个[0, 100)之间的随机数,并将他们打印到一个字符数组s 中
int main() {
char s[64];
srand(time(0));
int offset = 0;
for(int i = 0; i < 10; i++)
{
offset += sprintf(s + offset, "%d, ", rand() % 100);
}
s[offset - 1] = '\n';//将最后一个逗号换成换行符。
puts(s);
return 0;
}
四、reverse()函数
//1.reverse函数反转string
int main() {
string s;cin>>s;
reverse(s.begin(), s.end());
cout<<s<<endl;
return 0;
}
//2.reverse函数反转字符数组
int main() {
char a[100];
cin.getline(a,sizeof(a));
reverse(a,a+strlen(a));
puts(a);
return 0;
}
五、swap 交换函数
作用:交换变量/数组/容器 等
int a=1,b=2;
swap(a,b);
int a[]={1,2,3};
int b[]={3,2,1};
swap(a,b);
int main()
{
vector<int>V1(10,10),V2(10,5); //容器
for(vector<int>::iterator it=V1.begin();it!=V1.end();it++)
cout << *it << " ";
swap(V1,V2);
puts("");
for(vector<int>::iterator it=V1.begin();it!=V1.end();it++)
cout << *it << " ";
return 0;
}
六、数据对
·头文件: #include< utility >
·定义方法:pair<T1, T2> P;
·含义:表示P有两个类型,类型T1与类型T2
[默认初始化] pair< int , string >My_Pair ;
[自己初始化] pair< int , string >My_Pair2(100,"score") ;
[用别的初始化]pair< int , string >My_Pair3(My_Pair4) ;
[或者这样]pair< int , string >My_Pair3=My_Pair4 ;
默认初始化之后用修改P的内容make_pair(a,b) 函数!
pair< int , string > My_Pair ;
My_Pair=make_pair(100,"score") ;
cout << My_Pair.first << endl << My_Pair.second << endl;
T1 T2也可以用结构体或者也是pair类型的进行套娃!
//例子一
pair < pair < int , int > , string > P1(make_pair(11,12),"A");
cout << P1.first.first << " " << P1.first.second << " " << P1.second;
//例子二
struct pt{
int x;
int y;
};
int main()
{
pair < pt , double > P1;
P1.first.x=1;
P1.first.y=1;
P1.second = sqrt(P1.first.x*P1.first.x+P1.first.y*P1.first.y);
cout << P1.first.x << endl << P1.first.y << endl << P1.second;
return 0;
}
/*·pair的比较:优先比较first,first相同再比较second
使用> , >= , < , <= , == , != 进行pair的比较操作*/
pair<int,int>P1(500,20);
pair<int,int>P2(300,10);
if(P1>P2)cout << "Something";