重拾算法竞赛之路 day#4 (“纯新手”的入门经历)(STL)

一、C++与C

1.cin比scanf慢很多,哪怕是关闭了同步也是。1e5以上的数据用cin就可能会TLE。
2.关于输出小数,printf比较方便,cout需要用头文件,cout.setprecistion(int digit)修改精度。
3.bool 类型 非0为true 0为false
4.开辟内存 new int; 返回的是指针
5.struct 可以加入构造函数

STL

  • C中原有的

    strlen() 字符串长度
    strcmp() 字符串比较
    strcpy() 字符串拷贝
    memset() 暴力清空
    memspy() 暴力拷贝
<cstdlib>
	qsort() c语言快排(一般不使用)
	rand() 随机数
	malloc() free() c语言动态分配内存
<ctime>
	time(0) 从1970年到现在的秒数(配合随机数)  srand(time(0))//真正的随机数
	clock() 程序启动到目前位置的毫秒数
<cctype>
	isdigit()、isalpha() 判断字符类型,是否为数字、是否为字母
  1. < vector >
    用指针来遍历 vector::iteartor p1;
    STL中的指针被称为迭代器
    p1++;
    erase(p1);删除p1所在数字。
  2. < string >
    string str
    str.length(),str.size();
    str.insert(1,”aaa”);在下标为1处插入一个字符串
    str.
    3.
    sort(arr,arr + n);//复杂度O(nlogn)
  • min(1,2);max(1,2);//最大最小O(n)
    min_element(arr.begin(),arr.end());//返回数组最大最小的指针O(n)
    max_element(arr.begin(),arr.end());
    mth_element(arr.begin(),arr.end());//把数组中第n小的放在第n个位置(从0开始算),并保证左边的数比它小,右边的数比它大。(类似快排)但复杂度是O(n)

  • swap(arr[0],arr[1]);//交换任意俩个同类型的变量 O(n);
    reverse(arr.begin(),arr.end());//反转数组 O(n)
    unique(arr.begin(),arr.end());//需要在sort后用,去重复的数,返回去重后的结束指针 O(n)

  • bool isExist = binary_search(arr.begin(),arr.end(), 1);// 查找对应元素是否存在 O(logn)

  • lower_bound(arr.begin(),arr.end(),2);// 如果把一个数插入到有序数组,它应该插入到哪个位置,返回插入到第一个位置的指针
    upper_bound(arr.begin(),arr.end(),2);//返回可以插入到的最后一个位置的指针

  • 1s执行1e8次

猜你喜欢

转载自blog.csdn.net/wdshhh/article/details/105962486