一些新get的小知识点(更新中)
1.fill()
中 ,它的原理是把那一块单元赋成指定的值,也就是说任何值都可以
2.memset()
1 2019.07.22修订:val 传递的是ascii码,所以如果是初始化int类型的数组,只能赋值0 或 -1.如果是初始化char类型数组,那么可以写memset(x,'+',sizeof(x))
3.sort()
1 #include <algorithm> 2 3 void sort( iterator start, iterator end ); 4 5 void sort( iterator start, iterator end, StrictWeakOrdering compare );
sort 是对给定区间所有元素进行排序 第一个只需要传递你要排序的串(整形数组等都行)的头指针(数组第一个元素的指针)与数组最后元素的下一个位置。 第二个前面两个参数同第一,但第三个参数是传递一个你定义用于排序的函数 //有几次想用sort来着,但是忘记头文件了orz
4.while(scanf("%d",&n),n) //输入0表示结束的简单写法。
5. 因为还没有系统地学习数据结构orz: { 栈:isEmpty(),isFull....int e = *(a.top-1)取栈顶元素。*检查栈中是否含有指定数据*...队列:enqueue(x),dequeue,isEmpty,isFull.
6.atoi(char x),stdlib.h...atoi用于将字符串行驶的数字转换成整型数值。
7.string::find,npos的用法。洛谷P1308统计单词,PTA找250可用。https://blog.csdn.net/linwh8/article/details/50752733。避免博客被删,
1 问题:有两个字符串a、b, 现想判断a字符串是否包含b字符串,该如何设计程序? 2 3 思路:此处需要用到string库中的find函数与npos参数。 4 5 先说说string::npos参数: 6 npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西。取值由实现决定,一般是-1,这样做,就不会存在移植的问题了。 7 再来说说find函数: 8 find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos,但如果字符串不存在包含关系,那么返回值就一定是npos。所以不难想到用if判断语句来实现! 9 --------------------- 10 作者:小威威__ 11 来源:CSDN 12 原文:https://blog.csdn.net/linwh8/article/details/50752733 13 版权声明:本文为博主原创文章,转载请附上博文链接!
# include <iostream> 2 # include <string> 3 4 using namespace std; 5 6 int main(void) { 7 int number; 8 cin >> number; 9 while (number--) { 10 string a, b; 11 cin >> a >> b; 12 int pos = a.find(b); 13 if (pos == string::npos) { 14 cout << "NO" << endl; 15 } else { 16 cout << "YES" << endl; 17 } 18 } 19 return 0; 20 }//CSDN:小威威
8.string::c_str()用法。转载自https://blog.csdn.net/u013682388/article/details/39547773。
避免博客被删,存:
1 //标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组 2 //主要介绍c_str 3 //c_str():生成一个const char*指针,指向以空字符终止的数组。 4 //这个数组应该是string类内部的数组 5 #include <iostream> 6 //需要包含cstring的字符串 7 #include <cstring> 8 using namespace std; 9 10 int main() 11 { 12 //string-->char* 13 //c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同 14 15 //这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。 16 //因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中 17 const char *c; 18 string s = "1234"; 19 c = s.c_str(); 20 cout<<c<<endl; 21 s = "abcde"; 22 cout<<c<<endl; 23 } 结果是:
上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd 其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐) //更好的处理为
//标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组 //主要介绍c_str //c_str():生成一个const char*指针,指向以空字符终止的数组。 //这个数组应该是string类内部的数组 #include <iostream> //需要包含cstring的字符串 #include <cstring> using namespace std; int main() { //更好的方法是将string数组中的内容复制出来 所以会用到strcpy()这个函数 char *c = new char[20]; string s = "1234"; // c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。 strcpy(c,s.c_str()); cout<<c<<endl; s = "abcd"; cout<<c<<endl; }
9.lower_bound && upper_bound
1 int main() 2 { 3 int A[14]={1,1,2,2,2,4,5,5,6,8,8,8,10,15}; 4 int *pos; 5 int idx; 6 //找一个不小于 3 的第一个数字 7 pos=lower_bound(A,A+14,3); 8 idx = distance(A,pos); 9 cout <<"A["<<idx<<"]="<<*pos<<endl; 10 //找第一个 大于5的数字 11 pos=upper_bound(A,A+14,5); 12 idx=distance(A,pos); 13 cout <<"A["<<idx<<"]="<<*pos<<endl; 14 15 return 0; 16 }
A[5]=4 A[8]=6.
10.%i和%d 没有区别。%i 是老式写法。都是整型格式。
11.scanf("")的返回值是其接收的变量的个数。&x,&x的时候 x以 后输入的覆盖先前输入的。
12.unique()
unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址. 由于返回的是容器末尾,所以如果想得到去重后的size,需要减去初始地址 用法: sz = unique(b ,b + n)-b; sz为容器大小 --------------------- 作者:untilyouydc 来源:CSDN 原文:https://blog.csdn.net/qq_40774175/article/details/80343164 版权声明:本文为博主原创文章,转载请附上博文链接!
13.手动扩栈。
#pragma comment(linker, "/STACK:102400000,102400000")///手动扩栈
14. void * 的用法https://www.cnblogs.com/yuanyongbin/p/8058755.html
void *可以赋值给任何类型的变量 但是需要进行强制转换:
例:
int * a = NULL ;
void * b ;
a = (int *)b;
但是有意思的是:void* 在转换为其他数据类型时,赋值给void* 的类型 和目标类型必须保持一致。简单点来说:void* 类型接受了int * 的赋值后 这个void * 不能转化为其他类型,必须转换为int *类型;
...