C++标准库常用算法

常用标准库算法:

find(beg, end, val); 
根据equal操作符,循序查找[first, last)内所有的元素,找出第一个匹配“等同条件者”。如果找到,就返回一个指向匹配元素的迭代器,否者返回迭代器end()。

equal(beg1, end1, beg2); 
确定两个序列是否相等。如果输入范围中的每个元素都与从beg2开始的序列中的对应元素相等,就返回truemin(val1, val2); 返回两个数中的大数
max(val1, val2); 返回两个数中的小数
min_element(beg, end); 返回最小元素的迭代器
max_element(beg, end); 返回最大元素的迭代器

fill(beg, end, val);    将值val赋给[beg,end)范围内的所有元素  
fill_n(beg, cnt, val);  将值val赋给[beg,beg+cnt)范围内的所有元素

accumululate(beg, end ,val);[beg,end)内元素之和,加到初始值val上。

unqiue(beg, end); 
去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序。这两个参数表示对容器中[it_1,it_2)范围的元素进行去重(注:区间是前闭后开,即不包含it_2所指的元素)
返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素。

reverse(beg, end); 将区间[beg,end)内的元素全部逆序;

统计

count(begin,end,val);  统计等于val的元素个数
count_if(beg,end,func); 函数count的_if版本

遍历

for(char c:s)   遍历字符串
vector<int>& vec;   遍历数组向量
for (int num : vec) 

定义一个遍历字符c,让它分bai别等于字符串数组s里面的各个字符,然后执行下面的语句,当c被赋值为chars里面所有字符各一次后,就会退出这个循环。上面这句代码相当于:

for( int i = 0; i < s.length(); i++)
{ 
	s[i]....
}

常用头文件

# include <climits>  头文件定义的符号常量
CHAR_MIN       char的最小值
SCHAR_MAX      signed char 最大值
SCHAR_MIN      signed char 最小值
UCHAR_MAX      unsigned char 最大值
SHRT_MAX       short 最大值
SHRT_MIN      short 最小值
USHRT_MAX      unsigned short 最大值
INT_MAX       int 最大值
INT_MIN       int 最小值
UINT_MAX       unsigned int 最大值
UINT_MIN       unsigned int 最小值
LONG_MAX      long最大值
LONG_MIN       long最小值
ULONG_MAX      unsigned long 最大值
FLT_MANT_DIG    float 类型的尾数
FLT_DIG       float 类型的最少有效数字位数
FLT_MIN_10_EXP   带有全部有效数的float类型的负指数的最小值(以10为底)
FLT_MAX_10_EXP   float类型的正指数的最大值(以10为底)
FLT_MIN       保留全部精度的float类型正数最小值
FLT_MAX       float类型正数最大值
# include  <unordered_map>
size_type count ( const key_type& key ) const
count函数用以统计key值在unordered_map中出现的次数。实际上,c++ unordered_map不允许有重复的key。因此,如果key存在,则count返回1,如果不存在,则count返回0.

iterator find ( const key_type& key );
如果key存在,则find返回key对应的迭代器,如果key不存在,则find返回unordered_map::end。因此可以通过

map.find(key) == map.end()

Vector转Set与Set转Vector

set<int> st(vec.begin(), vec.end());
vec.assign(st.begin(), st.end());

二维数组创建

vector<vector<int> > vec(m,vector<int>(n));
int** a2 = new int*[rows];
for(int i=0;i<rows;i++)
    a2[i] = new int[columns];

for(int i=0;i<rows;i++)
    delete []a2[i];
delete []a2;

检测元素是否存在

vector<int>::iterator it = find(track.begin(), track.end(), value);
if (it != track.end())
   cout<<*it<<endl;
else
   cout<<"can not find"<<endl;

字符串逆序

reverse(s.begin(),s.end());
return s;

包含所有c++头文件的头文件

#include<bits/stdc++.h>

优点:

  • 节约时间与工作量

缺点

  • 不属于GNU C++库的标准头文件,在部分情况下可能会失败
  • 包含了一些不必要的头文件 ,编译时间增加
  • 不是C++标准的一部分,不可移植,因为可能有一些编译器不支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值