参考:【C语言 转 C++ 简单教程】 https://www.bilibili.com/video/BV1UE411j7Ti/?p=12&share_source=copy_web&vd_source=b4a9adec1e790e088162134b69d77d6c
stl
头文件
c:
#include <string.h>
c++
#include <cstring>
bool 变量
#include <iostream>
using namespace std;
int main(void) {
bool flag = true;
bool flag2 = -1;
bool flag3 = 0;
//0 为false,非0为true;
cout << flag<<" " << flag2<<" " << flag3;
//endl='\n'
}
一些函数
# include<iostream>
# include<cstring>//string头文件
using namespace std;
int main(void) {
string s1 = "HELLO";
string s2 = "WORLD";
string s3 = s1 + s2;
s1.length()//取长度
cin >> s1;//cin只能输入单词
cout << s1<<'\n';
cout << s1.length()<<'\n';//输出长度
string s4 = s1.substr(4, 2);//第5个开始的两个字母
cout << s4;
string s5 = s1.substr(6);//从第7个开始的全部
cout << s5;
结构体
c语言中:
typedef struct Student{
}
Student a;//只有typedef了,才可以直接用struct后面的字母作为类型
c++:
struct Student{
}
Student a;//不用typedef,直接用struct后面的字母作为类型
&引用,相当于c语言的传引用
vector
s1.length();//string的长度
a1.size();//vector的长度
vector头文件
#include <vector>
vector 长度:
#include <iostream>
#include <vector>
using namespace std;
int main (void){
vector <int> v;//定义变量
cout <<v.size()<<'\n';
return 0;
}
resize定义vector:
#include <iostream>
#include <vector>
using namespace std;
int main (void){
vector <int> v;//定义变量
v.resize(10);//(10,0)
//用v[i]=分配内存,以下实例for的特殊情况
int i;
for (i=0;i<10;i++)
v[i]=i;//存入数据语法
for (i=0;i<10;i++)
cout<<v[i]<<" ";
return 0;
}
分配内存,如果数字全一样,则在定义v的时候直接定义内容:
#include <iostream>
#include <vector>
using namespace std;
int main (void){
vector <int> v(10,2);//(10)相当于(10,0)
return 0;
}
push_back 末尾添加新数:
v.push_back(11);//v.push_back(要添加的数字);
push_back其实也可以用于填值,代替[ ]的写法
for (i=0;i<10;i++)
v.push_back(i);
迭代(输出的第二格式,用不了输入)
因为看形式就能看出来它需要数组先存在
输出,第二种如下,:
for(auto p=v.begin();p!=v.end();p++)//p是指针,s.begin(),s.end()返回的都是地址
cout<<*p<<" ";//解指针得数值
v.end的位置:
eg:
在8后面的位置
set
set是什么
set是集合,里面元素不相同,set会自动从小到大排序
set头文件
#include <set>
创建集合
set <int> s;//与vector不同,后面不能加括号 原因:set表示集合 (10)=(10,0)不合理,(10,2)不符合集合定义:互异
insert插入元素
s.insert(1);
s.insert(2);
s.insert(3);//{1,2,3}
查找 :s.find(data)
//1 2 3
s.find(2);//find返回的是数值的位置,数字2的位置是2
s.find(4);//第4个数字上的位置=s.end()
迭代
for(auto p=s.begin();p!=s.end();p++)
cout<<*p<<" ";
查找与bool值
位置与s.end()相等意味着没找到,返回0;
不等等于找到了,返回1;
cout<<(s.find(2)!=s.end())<<"\n";//(2位置处的数字)满足 不等于(空)返回1
cout<<(s.find(4)!=s.end())<<"\n"//(4位置上的数字=没有=空)不满足 不等于(空)返回0
删除:s.erase(data)
s.erase(2);
代码运行实例:
map
map是什么
map是键值对,自动从小到大排序
eg:
从大到小:字母的前后顺序,不是值的大小
其中:ha与hello:h一样,a在e前面,所以ha在hello前面
头文件
#include <map>
定义
map <string,int> m;
放元素
m["hello"]=2;
访问
cout<<m["hello"];//存在hello返回值,不存在返回0
迭代器 +结构体指针
for(auto p=m.begin();p!=m.end();p++)
cout<<p->first<<":"<<p->second;//map相当于结构体,结构体指针的用法见http://t.csdnimg.cn/d8vV8
一些代码实例:
#include <iostream>
#include <map>
using namespace std;
int main (void){
map <string,int>m;
m["hello"]=2;
m["world"]=3;
cout<<m["hello"]<<" "<<"hello"<<"\n";
for(auto p=m.begin();p!=m.end();p++)
cout<<p->first<<":"<<p->second<<"\n";
return 0;
}
stack
位运算bitset
bitset<5> b (19);//5进制数组,十进制写法转化成二进制
//11101,b[0]=1,b[1]=0...从低到高
cout<<b<<"\n";//11101
cout b[0]<<"\n";//1
bitset<5> b ;//5进制数组,初始化为0
bitset<5> b ("11");//二进制写法,最低两位是11,输出00011
处理 (摘要—判断返回bool值
第一个第二个返回bool值(0或1)
取反
归零
unsigned long类型转换
创建新a,输出a
m=0110101//先定义m
bitset<5>b(m,0,5)//从第0位开始,从前往后数5个数字,转化为二进制,本就是二进制就照抄
//=biteset<5>b("01101")
sort函数
sort的作用
从小到大排序
头文件
#include <algorithm>
sort用法
sort(m.begin(),m.end());//从第一个元素的位置排到最后一个+1个元素的位置(不存在)所以sort的排序对象是左闭右开区间
cmp
bool cmp(intx,inty)
{
return x>y;//若返回值为假,则交换顺序,(不能有“=”)
}
int main( ){
.
.
.//定义m
sort(m.begin(),m.end(),cmp);
for(auto p=m.begin();p!=m.end();p++)
cout <<*p<<" ";
}
实例:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
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;
}
int main (void){
stu s[3];
for(int i=0;i<3;i++)
cin>>s[i].name>>s[i].age;//输入
sort(s,s+3,cmp);//在数组里A+i=&A[i]
//不是vector,s是s[0]的位置=s.begin(),s+3是末尾s[2]的后一位的位置=s.end() 符合sort的使用要求
for(int i=0;i<3;i++)
cout <<s[i].name<<" "<<s[i].age;
}
头文件cctype-与char的各种处理有关
#include <cctype>
int main (){
char A;
}
各种处理函数(摘要-判断返回bool值
运行实例1
运行实例2:
第四个判断是不是字母或者数字 不返回0即代表是
c++11 auto声明
auto 的作用1-万能类型
它会自己判断数据的类型然后存入变量中 完全不用操心用int/float还是double等
注意auto使用时候一定初始化
auto a=19;
auto b=1.8;
cout<<a<<" "<<b;//正确
auto c;
cin>>c;//报错
auto的作用2-迭代器
由上面内容可知,map,set,vector均可用迭代器,其中map要搭配指针
c++11 基于范围的for循环
int a[4]={1}//1,0,0,0
for(int i:a);//i访问a,每次访问一个数字,然后执行一次下列输出操作,循环此过程直到全部输出
cout<<i<<" ";//输出的就是数组a
访问a并且让每一个元素都加1
for(int i:a){
i++;
cout<<i;
}
for(int i:a){
i++;
}
//传值,此时a没有改变,所以接下来的过程输出的是原数组
for(int i:a){
cout<<i<<" ";}
for(int &i:a){
i++;
}
//传指针,改变
for(int i:a){
cout<<i<<" ";}
上述int可以改变成auto
stl均可以用
c++ to string
头文件 #include <cstring>