常用标准库算法:
find(beg, end, val);
根据equal操作符,循序查找[first, last)内所有的元素,找出第一个匹配“等同条件者”。如果找到,就返回一个指向匹配元素的迭代器,否者返回迭代器end()。
equal(beg1, end1, beg2);
确定两个序列是否相等。如果输入范围中的每个元素都与从beg2开始的序列中的对应元素相等,就返回true;
min(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++标准的一部分,不可移植,因为可能有一些编译器不支持