做网站放到百度上需要什么,网站建设设计说明书,网站技术支持,音乐图书馆网站建设1、提高cin与cout效率
cin与cout效率相比于scanf与printf低下
解决方案#xff1a;
ios:sync_with_stdio(false);
cin.tie(0),cout.tie(0);
2、C标准算法库algorithm
max(a,b)#xff1a;求两个数最大值min(a,b)#xff1a;求两个数最小值abs(a,b)#xff1a;求一个整…1、提高cin与cout效率
cin与cout效率相比于scanf与printf低下
解决方案
ios:sync_with_stdio(false);
cin.tie(0),cout.tie(0);
2、C标准算法库algorithm
max(a,b)求两个数最大值min(a,b)求两个数最小值abs(a,b)求一个整型变量的绝对值swap(a,b)交换a和b的值reverse(a,a5)翻转a到a5区间(前包后不包)的数组、容器的值a为a[5]地址reverse(v.begin(),v.end())翻转容器则需要用到begin()、end()函数或迭代器sort(a,a5)对a到a5区间的数组、容器进行排序默认升序排列a为a[5]地址sort(v.begin(),v.end())排序容器则需要用到begin()、end()函数或迭代器count(a, a5, x)在数组中查找x在某区间出现的次数a为a[5]地址、count(v.begin(),v.end(),x)容器中查找则需要用到begin()、end()函数或迭代器__gcd(a,b)求最大公因数二者乘积除以最大公因数即可得到最小公倍数next_permutation(a,a3)将给定区间的数组、容器全排列容器全排列将参数换成iterator迭代器或begin()、end()函数
#includeiostream
#includealgorithm
using namespace std;
int main() { int a[3] {1,2,3};do{couta[0]a[1]a[2]endl; }while(next_permutation(a,a3)); //输出1、2、3的全排列 return 0;}
输出
123
132
213
231
312
321 补充 3、#includecmath中的fabs()函数还可用于求浮点型变量的绝对值 7、sort降序排序 bool cmp(int a, int b) {return a b;
}int main() {int a[5] {55,44,33,22,11};sort(a,a5,cmp);//这里需要加上自己自定义的函数}3、memset函数
void *memset(void *dest, int c, size_t count);
dest是目标内存块的指针c是要设置的内容count是要设置的字节数。
该函数会将dest指向的内存块的前count个字节都设置为c
4、vector向量
在容器中向量可以看成类似一维的存储形式或者理解为长度可变的数组
优点
尾插尾删效率很高支持随机访问利用下标访问相比链表结构。顺序表CPU高速缓存命中率更高因为顺序表的底层由数组实现物理地址是连续的
缺点
头部和中部插入删除效率低O(N)扩容存在性能消耗和空间上的浪费 //元素个数int size vectorname.size(); //判断是否为空bool isEmpty vectorname.empty(); //从vec1.back位置插入5个值为3的元素vectorname.insert(vectorname.end(),5,3); //删除末尾元素vectorname.pop_back(); //删除之间的元素其他元素前移vectorname.erase(vec1.begin(),vec1.end());//判断是否相等、、、...cout(vectornamevectorname)?true:false; //获取迭代器首地址vectorint::iterator iter vectorname.begin(); //获取const类型迭代器vectorint::const_iterator c_iter vectorname.begin(); //清空元素vectorname.clear(); 5、list列表
列表是用双向链表实现的所谓的双向链表指的是既可以从链表的头部开始搜索找到链表的尾部也可以进行反向搜索从尾部到头部
优点
任意位置插入删除效率很高。(O(1))按需申请和释放优化了vector在空间上的浪费
缺点
CPU高速缓存的命中率不高物理地址空间不连续不支持随机访问
构造空的list
list() 构造的list中包含n个值为val的元素
list (n, val) 拷贝构造函数
list (list x) 用[first, last)区间中的元素构造list
list (first, last) 头插一个数据
push_front头删一个数据
pop_front尾插一个数据
push_back尾删一个数据
pop_back获取当前容器当中的元素个数
size判断当前容器是否为空
empty清空容器,清空后容器的size为0, 但是头结点(哨兵位)不会被清除
clear容器当中的数据默认排为升序
sort删除容器当中特定值的元素, 找到了就删(所有的都删除),没就不删
remove删除容器当中连续的重复元素进行去重
unique交换两个容器的内容
swap得到容器中第一个元素的正向迭代器
begin得到容器中最后一个元素的后一个位置的正向迭代器
end得到容器中最后一个元素的后一个位置的反向迭代器
rbegin得到容器中第一个元素的反向迭代器
rend获取list容器当中的第一个元素
front获取list容器当中的最后一个元素
back
list当中的insert函数支持三种插入方式
在指定迭代器位置插入一个数,在指定迭代器位置插入n个值为val的数,在指定迭代器位置插入一段迭代器区间左闭右开
#include iostream
#include algorithm
#include vector
#include list
using namespace std;int main()
{listint lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);listint::iterator pos find(lt.begin(), lt.end(), 2);lt.insert(pos, 9); //在2的位置插入9pos find(lt.begin(), lt.end(), 3);lt.insert(pos, 2, 8); //在3的位置插入2个8vectorint v(2, 7);pos find(lt.begin(), lt.end(), 1);lt.insert(pos, v.begin(), v.end()); //在1的位置插入2个7}erase
list当中的erase函数支持两种删除方式
删除指定迭代器位置的元素,删除指定迭代器区间左闭右开的所有元素,
#include iostream
#include algorithm
#include vector
#include list
using namespace std;int main()
{listint lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.push_back(5);listint::iterator pos find(lt.begin(), lt.end(), 2);lt.erase(pos); //删除2pos find(lt.begin(), lt.end(), 4);lt.erase(pos, lt.end()); //删除4及其之后的元素return 0;
}6、deque双端队列
一种双开口的“连续”空间的数据结构从前后两端都可以进行数据的插入和删除操作同时支持数据的快速随机访问
7、string字符串
与vector相似的容器。专门用于保存字符。随机访问快。尾部插入删除快
8、map映射