一些新get的小知识点(更新中)

 1.fill()

中 ,它的原理是把那一块单元赋成指定的值,也就是说任何值都可以 
View Code

2.memset()

1 2019.07.22修订:val 传递的是ascii码,所以如果是初始化int类型的数组,只能赋值0 或 -1.如果是初始化char类型数组,那么可以写memset(x,'+',sizeof(x))
View Code

3.sort()

1 #include <algorithm> 
2 
3 void sort( iterator start, iterator end ); 
4 
5 void sort( iterator start, iterator end, StrictWeakOrdering compare );
View Code
sort 是对给定区间所有元素进行排序
第一个只需要传递你要排序的串(整形数组等都行)的头指针(数组第一个元素的指针)与数组最后元素的下一个位置。
第二个前面两个参数同第一,但第三个参数是传递一个你定义用于排序的函数
//有几次想用sort来着,但是忘记头文件了orz
View Code

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 版权声明:本文为博主原创文章,转载请附上博文链接!
View Code
 # 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:小威威
View Code

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 }
结果是:
View Code
上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd

其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)

//更好的处理为
View Code
//标准库的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;
}
View Code

 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 } 
View Code

 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 
版权声明:本文为博主原创文章,转载请附上博文链接!
View Code

 13.手动扩栈。

#pragma comment(linker, "/STACK:102400000,102400000")///手动扩栈
View Code

 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 *类型;

...

原文地址:https://www.cnblogs.com/greenaway07/p/10500477.html