1.C++构架
#include<bits/stdc++.h>//C++万能库 包含大部分库函数
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;// =scanf("%d",&a);
cout<<a<<endl;//=printf("%d\n",a);
return 0;
}
2.C++ STL <string>字符串
string s;
getline(cin,s);//getline(cin,string变量)
cout<<s<<endl;
char s2[100];
cin.getline(s2,100);//cin.getline(字符串数组名,长度)
string常见操作
str.length();str.size();
str.insert(1,"aaa");//在下标为1处插入一个字符或者字符串
str.issert(str.begin(),'a')//在迭代器处插入一个字符或者字符串
str.c_str();返回c语言字符串,用于printf
str.append(str2);//把str2拼接到str后面
str.compare(str2);//strcmp(str,str2)
str==str2//strcmp(str,str2)==0;
str+=str2;//str.append(str2);
str+='a';//str.push_back('a'); 也可以是字符串
3.C++ STL <vector>数组
初始化:
vector<int> arr1(100);
//既可以像数组一样用下标访问,也可以像链表一样动态改变长度。
int arr1[100];
vector<int> arr(100);
vector<int> list;
//C语言方法遍历
for(int i=0;i<100;i++)
{
scanf("%d",&arr[i]);
}
//C++ vector遍历
for(int i=0;i<100;i++)
{
int a;
cin>>a;
list.push_back(a);
}
vector常见操作
list.size();//数组元素个数 O(1)
list.clear();//清空数组 O(n)
list.empty();//数组是否为空 O(1)
list.begin();//数组的首元素迭代器 O(1)
list.end();//数组最后一个元素的下一个元素的迭代器(该元素实际不存在) O(1)
list.erase(p1);//删除数组某个迭代器所在位置的数字 O(n)
list.push_back(1);//往数组后面添加元素 O(1)
list.pop_back();//删除最后一个元素 O(1)
迭代器与普通指针使用方法的对比
vector<int> arr1(100);
int arr2[100];
vector<int>::iterator p1;
int *p2;
for(p1=arr1.begin();p1!=arr1.end();p1++)
{
cout<<*p1<<endl;
}
int i;
for(p2=arr2,i=0;i<100;i++,p2++)
{
cout<<*p2<<endl;
}
4.C++ STL <algorithm>算法函数
//sort(排序开始指针,排序结束指针——最后元素的下一个元素的指针)
//时间复杂度O(nlogn)
vector<int> arr {2,1,3,4,6};
sort(arr.begin(),arr.end());
int arr2[]={2,1,3,4,6};
sort(arr2,arr2+5);
//sort( , ,自定义比较函数)
//内部排序函数是按小于干系比较的,排序结果是升序(默认)
//内部排序函数是按大于干系比较的,排序结果是降序
bool cmp(int a,int b)
{
return a>b;
}
int arr2[]={2,1,3,4,6};
vector<int> arr {2,1,3,4,6};
sort(arr2,arr2+5,cmp);
min(1,2);max(1,2);
//最大最小值 O(1)
nth_element(arr.begin(),arr.begin()+n,arr.end());
//把数组中第n小的元素放到第n个位置
//保证左边的数小于他 右边的数大于他 O(n)
//并不能保证左右元素顺序排序
swap(arr[0],arr[1])
//交换任意两个同类型变量 O(1)
reverse(arr.begin(),arr.end())
//反转数组 O(n)
int NewLenght=unique(arr.begin(),arr.end())-arr.begin();
//arr必须是已经排好序
//unique作用是去重 O(n)
//但不是真正的去重 只是把后面不重复的元素颠覆前面重复的元素
bool isExist=binary_search(arr.begin(),arr.end(),1);
//查找元素是否存在 O(longn)
int *firstLoc=lower_bound(arr.begin(),arr.end(),1)-arr.begin();
int *lastLoc=upper_bound(arr.begin(),arr.end(),1)-arr.begin();
//两个函数都是查找有序数组中出现该元素的位置
//low_bound是查找第一次出现位置 upper_bound是查找最后一次出现的位置
//返回的对应位置的指针 O(longn)