#include<iostream>
#include<string>
using namespace std;
void test1()
{
string line;
char li[100];
//cin.getline(line,1000)针对的是字符数组
cin.getline(li,1000);
cout<<li;
getline(cin,line);
cout<<line<<endl;
//cin.get()=getchar();
//2.多组数据输入输出 EOF
while(cin>>n>>m)
//{
//} 3.cin比scanf要慢 TLE 4.endl相较于\n有清空缓冲区的功能
//<iomanip>
// cout.setprecision() 有小数输出用c尽量不要用c++
}//bool up可读性
//动态开辟内存
//int *a=new int[100]; delete[] a;
//变常数数组 c可c++不可
//&实现了指针的某些功能
//int &a=number;
// int *a=&number;//简化指针 偶尔改变变量本身时用
//struct Node
//{};
//==c里的
//typedef Node{
//}Node;
//
int main()
{
test1();
test2();
}
void test2()
{
//<vector> <string> <algorithm>
//<cstring>
//strlen() strcmp() strcpy()
//memset() 暴力清空 逐个字节填写 memset(str,0,sizeof(str));
//memset(str,0x3f3f3f3f,sizeof(str));
//memcpy() 暴力拷贝
//<cmath> 三角函数 指数函数 浮点取整
//<cstdlib> qsort() c语言快排
//rand() 随机数
//malloc free() c语言动态分配内存
//<ctime>
//time(0) 从1970年到现在的秒数(配合随机数)
srand(time(0))
//clock()程序启动到目前位置的毫秒数
int a=clock();
clock()-a;
//<ctype>
//isdigit(),isalpha()
<vector>向量->数组
vector<int> arr1(100);
int arr2[100];
vector<int> list;
list.push_back(1);
list.push_back(2);//既可以用下标访问 又可以像链表改变长度
vector<int>::iterator p2;
for(p2=arr1.begin();p2!=arr1.end();p2++)
{
}
//vector常见操作
list.size();list.clear() o(n); list.empty();
list.erase(p1) o(n); list.push_back(1); list.pop_back();
//string
string str1="hello";
char str2[]="world";
string str3;
str3.push_back('!');//string和c语言字符串的关系和vector和普通数组的关系一样
cout<<str1<<" "<<str2<<" "<<str3<<endl;
//
string str="hello";
str.length();str.size();//O(n)
str.insert(1,"aaa");//O(n)
str.insert(str.begin(),'a');//O(n)
str.c_str();//返回c语言字符串 用于printf O(n) 返回char* 数组
str.append(str2);//str+=str2;
str.compare(str2);
str==str2;strcmp(str,str2)==0;
str+='a';//str.push+back('a')
algorithm
//#include<algorithm>
//sort(arr,arr+n); c
//sort(arr.begin(),arr.end()); STL
//for(vector<int>::iterator it=arr.begin();it!=arr.end();it++)
//printf("%d",*it);
int cmp(int a,int b)
{
return a<b;//升序
}
//sort(arr.begin(),arr.end(),cmp)//第三个函数 排序的一句(可以放入比较函数)
int main()
{
int arr[3]={12,1,5};
sort(arr,arr+3,cmp);
for(int i=0;i<3;i++)
cout<<arr[i]<<endl;
}
struct Point{
int x,y;
};
Point points[1111];
bool cmp(Point a,Point b)
{
if(a.x!=b.x)
{
return a.x<b.x;
}
return a.y<b.y;
}
//int main()
{
sort(points,points+10,cmp);//自己定义的结构体一定要自己写函数
}
运算符重载/函数
其他algorithm函数
//其他algorithm函数
//最大最小值 min(1,2) max(1,2); O(1)
//数组最大最小指针 O(n)
min_element(arr.begin(),arr.end());
max_element(arr.begin(),arr.end());
//把数组中第n小(从0开始算)的数放到第n个位置
//类似快排 并且保证它左边的数比它小,右边的数比它大
//O(n)
nth_element(arr.begin(),arr.begin()+n,arr.end());
//左乱序右乱序
swap(arr[0],arr[1]);//O(1)
reverse(arr.begin(),arr.end());//反转数组 O(n)
//假设arr已经排好序
//使arr中不出现重复的数字(去重)
//返回去重后数组的结束指针
//O(n)
int newLength=unique(arr.begin(),arr.end())-arr.begin();
//unique需要在sort之后使用
//查找对应元素是否存在
//O(logn)
bool isExist=binary_search(arr.begin(),arr.end(),1);
//两个函数都是在做一件事
//如果把一个数插入有序数组 它应该插入到哪个位置
//lower_bound返回第一个插入位置的指针,upper_bound返回一个位置的指针
//O(logn)
int firstLoc=lower_bound(arr.begin(),arr.end(),2)-arr.begin();//1
int lastLoc=upper_bound(arr.begin(),arr.end()2,2)-arr.begin() ;//2
其他容器
set<int> st;
st.insert(1);
st.find(1);
st.erase(1);
mutiset<int> mst;
mst.insert(1);
mst.insert(1);
mst.count(1);//2
//<set>包含set(集合) mutiset(多重集)
//set用来保存很多很多元素 并能够在O(logn)的时间内查找 删除 添加某个元素
//迭代器的++和--能够在O(logn)的时间里找到第一个比它大(小)的数
//set自带去重 而mutiset允许元素重复 通过count可以获得某个元素的数量
//set是用某种平衡树实现的
<map>(映射)
pair<int,int> origin;//
//pair<string,int> pr{"小明",180}; 比较 先比较第一个变量 再比较第二个
origin=make_pair(0,0);
origin.first==origin.second;
origin.swap;
pair<string,int>id;
id=make_pair("somebody",110);
//map包含的第一个数据结构是pair,它可以由任意两种类型构成
//当你偷懒不想写结构,又要用到两个相关联的变量时,可以用pair
//pair自带了比较函数 默认先比第一个再比较第二个
pair<string,int> id;
id=make_pair("somebody",110);
map<string,int> studentHeight;//第一个为下标 第二个为数组值
studentHeight["小明"]=170;
studentHeight["小红"]=150;
studentHeight.insert(id);
studentHeight.erase("小明");
//map的第二个数据结构是map(映射)
map可以看成一个超级数组 你可以把字符串或者其他类型当成数组的下标
插入 查询 删除操作复杂度都是O(logn)
map内部使用了pair,所以你也可以通过inset一个pair来插入
map<string,int>height
{
{"1",1},
{"2",2}
};
bitset
bitset<1000> bst;
bst[0]=1;bit.set(0);
bit[0]=0;bst.reset(0);
bst<<1;bst>>1;bst^=1;bst&=1;
bst.count();
bst.to_string();
bst.to_ullong();
//说明:
bitset是一个只由0和1构成的数组 其占用空间较小
bitset不仅可以和数组一样用下标访问 还可以进行位运算
https://cplusplus.com/reference/