c转c++

输入输出

cin >> 
cout << 
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//取消同步流

string操作

getline(cin, a);//输入字符串(可以输入空格)
s1 = s.substr(n, m);//复制s从第n个字符开始,往后m个字符到s1中
s1 = s.substr(n);//复制s从第n个字符开始到结束的所有字符到s1中

结构体

声明结构体时不需要写struct

struct stu{
	string name;
    int age;
}

int main()
{
	stu a;//不需要写struct,如果是c写法:struct stu a;
}

引用

void func(int &a)
{
	a++;
}

int main()
{
    a = 4;
    func(a);
    cout << a;//结果为5,引用会改变参数本身
}

运算符重载

//格式
返回类型 operator 运算符(参数列表)
{
    函数体;
}
//例子
bool operator < (const Book &u) cosnt
{
    if(a == u.a && b == u.b)
        return c < u.c;
    if(a == u.a)
        return b < u.b;
    return a < u.a;
}

STL

vector

#include<vector>
vector <int> v;//声明向量(数组)
cout << v.size();//输出向量大小,当前结果为0
v.resize(10);//给向量v分配10个空间
cout << v.size();//当前结果为10
v.push_back(5);//给v的尾端追加数据5

vector <int> a(10);//声明向量a并分配10个空间,默认数值为0
vector <int> b(10,2);//声明向量b并分配10个空间,数值都为2

//对vector a进行排序和去重
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
//因为unique是比较相邻元素是否重复的,因此要先排序后去重。unique返回的地址是去重后最后一个不重复的元素的下一个地址,unique本身只是将重复的元素移到靠后的位置,erase才是执行删除c

迭代器

for(auto p = v.begin(); p != v.end(); p++)
		cout << *p << " ";
//一种遍历数组v的方法,注意:bigin()、end()返回的是地址
		cout << p.front() << " ";
//front()返回第一个元素

for(auto i : s)
    cout << i << ' ';
//遍历数组s,这种写法是把每个s的元素拷贝一份赋给变量i,再将变量i输出,这样是不能修改s的元素的值的,更好的写法是引用
for(auto &i : s)
    cout << i << ' ';
//引用的写法可以修改s的元素,并且少了拷贝的步骤,效率更高,每个i就是s的元素本身。

set

//set是集合,元素不重复,自动排序
#include<set>
set <int> s;//s后面不能写其他内容
s.insert(10);//向集合s中插入元素10
s.find(10);//查找元素10,返回指针
s.erase(10);//删除元素10

#include<unordered_set>//额外添加头文件
unordered_set <int> a;//不排序的集合

map

//map是键值对,它会自动将所有的键值对按照键的大小,从小到大排序
#include<map>
map <string, int> m;
m["hello"] = 2;
m["world"] = 3;

cout << "hello = " << m["hello"] << '\n';

for(auto p = m.begin(); p != m.end(); p++)
cout << p->first << " : " << p-> second << '\n';

cout << m.size() << '\n';//输出m的长度

#include<unordered_map>//额外添加头文件
unordered_map <string, int> s;//不排序的键值对

//先进后出
#include<stack>
stack <int> a;
a.push(1);
a.push(2);//进栈
a.pop();//出栈
cout << a.top() << '\n';//栈只能访问栈顶
cout << a.size() << '\n';//输出栈的长度

队列

//先进先出
#include<queue>
queue <int> a;
for(int i = 1; i <= 10; i++)
	s.push(i);
cout << s.front() << " ";//获取队首(第一个元素)
cout << s.back() << " ";//获取队尾(第二个元素)

s.pop();//将队首出队
cout << s.size() << " ";//获取队列长度

bitset

//bitset类似于一个字符数组(二进制位),但是与常识不一样,它会把最右边的位作为第0位,从右往左依次增加。
bitset<5> b;//声明一个长度为5的二进制数组,默认全为0
bitset<5> b(1);//括号内为int型时,声明一个长度为5的二进制数组,值为1的二进制,即00001。注意:括号中数字大于给定字长所能表示的最大数字则会溢出
bitset<5> b("123");//括号内为字符串时,输出为在字符串前加0,直到长度等于5
b.arry();//b中是否有1
b.none();//b中是否没有1
b.count();//b中1的个数
b.size();//b的大小
b.test(i);//下标为i的元素是不是1,注意,这里的下标是从右向左的。
b.flip();//所有位取反
b.flip(i);//第i位取反,下标从右向左
b.reset();//所有位归零
b.reset(i);//第i位归零
unsigned long a = b.to_ulong();//将bitset转unsigned long类型
s = "0110101";
bitset <5> b(s. 0, 5);//从s的第0位开始,总共向b中放入5位数据,若放入长度小于b的长度,则在左边补零,这句与bitset<5> b(s);等效

sort

#include<algorithm>
//sort对数组a[]或向量vector进行排序,默认从小到大排序
//数组sort(a, a + n);
//向量sort(v.begin(), v.end());
bool cmp(int x, int y)//x在y前面
{
    return x > y;//如果返回值为0,则交换两数
    //大于号-从大到小排、小于号-从小到大排
}
sort(v.begin(), v.end(), cmp);//手写cmp函数,进行从大到小排序

struct stu
{
    string name;
    int age;
};

bool cmp(stu a, stu b)
{
	if(a.age != b.age)
        return a.age > b.age;//按年龄从大到小排序
    else
        return a.name < b.name;//按名字从小到大排序
}

cctype

#include<cctype>
//对字符操作的函数
char c = 'A';
isalpha(c);//判断是不是字母
islower(c);//判断是不是小写字母
issupper(c);//判断是不是大写字母
isalnum(c);//判断是不是字母或数字
isspace(c);//判断是不是空格/ '\t' / '\r' / '\n'
tolower(c);//转化为小写字母
toupper(c);//转化为大写字母

for遍历

for(int i : arr)
	cout << i << '\n';//输出每个元素的值,这里不能改变元素的值
for(int &i : arr)
    i = i * 2;//将数组中每一个元素都乘2,只有在引用的时候才能改变元素的值,这种修改只存在于for内部,在循环之外,arr还是原先的值,没有改变。
for(auto i : arr)
	i = i * 2;//使用auto遍历

to_string

//将数字转化为字符
#include<string>
string s = to_string(123.1);
cout << s << '\n';
printf("%s\n",s.c_str());

stoi stod

int a = stoi("123");//将字符串转化为int
double b = stod("123");//将字符串转化为double

reverse

//reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值

//反转数组顺序
int p[5]={1,2,3,4,5};
reverse(p,p+5);//5,4,3,2,1
//反转vector容器中元素顺序
vector<int> v = {5,4,3,2,1};
reverse(v.begin(),v.end());//v的值为1,2,3,4,5
//反转string类的字符串
string str="www.mathor.top";
reverse(str.begin(),str.end());//str结果为pot.rohtam.wwww
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值