priority_queue用法
#include
std::priority_queue<sometype,std::vector,less>
默认状态,最大堆,sometype为基本类型(int,double,string)或实现了<和>重载的自定义类
std::priority_queue<sometype,greater>
最小堆,sometype为基本类型(int,string)或实现了<和>重载的自定义类
Note:对于无法重载比较运算符的类,例最小优先队列:
struct node{
int key;
...
};
struct cmp{
bool operator()(node a,node b){
return a.key > b.key;//这里的>可以这样记是在队列中前后两个元素,若函数返回true,则需要交换位置。
}
};
int main(){
priority_queue<node,vector,cmp> q;
}
string 字母转小写
#include
#include
std::string data = "Abc";
std::transform(data.begin(),data.end(),data.begin(),::tolower);
整数转16位二进制
string dtob(const string d){
int num;
string res;
stringstream sstem;
sstem<>num;
sstem.clear();
sstem.str("");
for(int i=15;i>=0;i--){
sstem<<((num>>i)&1);
}
sstem>>res;
return res;
}
C++继承权限
第一:private,public,protected 访问标号的访问范围。
private:只能由1.该类中的函数、2.其友元函数访问。
不能被任何其他访问,该类的对象也不能访问。
protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。
但不能被该类的对象访问。
public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。
注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。
第二:类的继承后方法属性变化。
private 属性不能够被继承。
使用private继承, 父类的protected和public属性在子类中变为private;
使用protected继承,父类的protected和public属性在子类中变为protected;
使用public继承, 父类的protected和public属性不发生改变;
Other
函数
----------------------------*/
void ToUpperString(string &str)
{
transform(str.begin(),str.end(),str.begin(),(int (*)(int))toupper);
}
void ToLowerString(string &str)
{
transform(str.begin(),(int (*)(int))tolower);
}
/*---------------------------------------------
new 异常处理&动态二维数组&delete 释放
---------------------------------------------*/
char (*c)[5]; //如果列数已知
try{c=new char[n][5];}
catch(bad_alloc) //定义在exception中的异常类型
{
cerr <<"out of memory"<
bool make2dArray(T** &x,int numberOfRows,int numberOfColumns)
{
try{
x= new T*[numberOfRows]; //创建行指针
for(int i=0;i<numberOfRows,++i)//为每一行分配空间
{
x[i]=new int[numberOfColumns];
}
return true;
}
catch (bad_alloc) {return false;}
}
//----------------------------行列未知,更好写法--------------------------
template
void make2dArray(T* &x,int numberOfRows,int numberOfColumns)
{
x=new T [numberOfRows];
for(int i=0;i<numberOfRows;++i)
x[i]=new int[numberOfColumns];
}
try{make2dArray(x,r,c);} //在适当的地方抛出异常
catch(bad_alloc)
{
cerr<<"error"<<endl;
exit(1);
}
//---------------------------------delete--------------------------------
template
void delete2dArray(T* &x,int numberOfRows)
{
for(int i=0;i<=numberOfRows;++i) //删除行数组空间
delete [] x[i];
delete [] x; //删除行指针
x=NULL;
}
/-----------------------------
快速幂非递归
----------------------------*/
include
using namespace std;
int qpow(int x,int y){
int res =1;
while(y>0){
if(y&1){
res*=x;
}
x*=x;
y>>=1;
}
return res;
}
int main(){
int res = qpow(2,7);
printf("%d\n",res);
}
//----------------------------------------------------