to_string函数可以将数字转换为string类型。
stable_sort()排序不改变相同值元素的顺序
scanf("%[^\n]",s);
替代gets的方法
1.vector
//(1)一维
vector<int> v1;
v1.push_back(100);
v1.pop_back();//删除尾部元素
v1.clear();
sort(v1.begin(),v1.end(),less<int>());
//stable_sort()排序不改变相同值元素的顺序
v1.push_back(100);
v1.push_back(1000);
reverse(v1.begin(),v1.end());
int i,len1=v1.size();
for(i=0; i<len1; ++i)
{
cout<<v1[i]<<" ";
}
v1.insert(v1.end(),5,3);//在尾部插入5个值为3的元素
v1.erase(v1.begin()); //删除一个指定的元素,后面元素前移
v1.erase(v1.begin(),v1.begin()+2);
//删除v1[0]--v1[2]之间的元素,后面的元素后移
vector<int>v2;
cout<<(v1>=v2)<<endl;//从前向后进行比较
vector<mmp>v3;
v3.push_back({1,2});
//(2)二维
int n1=10,n2=20;
vector<vector<int>> v2(n1,vector<int>(n2));//设置数组长度,默认初始值(默认初始值为0)
vector<vector<int>> v3(n1,vector<int>(n2,0));//设置数组长度,给定值初始
vector<int> v4={{1,2,3},{2,5,6}};
vector<vector<int>> v5(r);//每行不一定几个数,就是想对每行的列进行操作
v5[i].push_back(1);//这就是该第i-1行的插入一个元素,值为1
vector<vector<int>> v6;//不指定大小
int arr[] = {11, 32, 41, 25, 67, 100, 88, 233}; // 列表初始化内置数组
vector<int> iv(begin(arr), end(arr));
vector<int> iv(arr, arr+8);
for(auto c:iv) // 输出 vector 对象的内容以验证结果
cout << c << ' ';
cout << endl;
2.queue
void solve()
{
queue<int>q1;
q1.push(100);
cout<<q1.front();//队首元素
cout<<q1.back();//队尾元素
while(!q1.empty())
{
cout<<q1.front()<<" ";
q1.pop();
}
}
3.priority_queue
优先级队列的时间复杂度为O(nlogn)
struct mmp
{
int a,b;
bool operator<(const mmp &w)const
{
if(b==w.b)
{
return b>w.b;
}
return a<w.a;//大的在前面
}
};
void solve()
{
priority_queue<int,vector<int>,less<int> >q1;
priority_queue<int>q2;//默认从大到小
q1.push(100);
while(!q1.empty())
{
cout<<q1.top()<<" ";
q1.pop();
}
priority_queue<mmp>q3;
while(!q3.empty())
{
cout<<q3.top().a<<" "<<q3.top().b<<endl;
q3.pop();
}
}
4.string
void solve()
{
char s[100]= {"12"};
string s1="12";
s1=s;
s1=s1+"34";
s1.insert(s1.begin()+2,'2');
s1.erase(s1.begin()); //删除某一个位置的元素
s1.erase(s1.begin(),s1.end()-1);//删除某一个区间的元素
for(int i=0; i<s1.size(); ++i)
{
cout<<s1.at(i)<<endl;
}
cout<<s1<<endl;
int pos=s1.find("12");
if(pos<0)
{
cout<<"不含该字串"<<endl;
}
else
cout<<pos<<" "<<"找到字串的起始位置"<<endl;
reverse(s1.begin(),s1.end());
sort(s1.begin(),s1.end());
s1.replace(1,2,"3");//在位置1处替换原字符中长度为2的字符串
string A("aBcd");
string B("Abcd");
cout << "A.compare(B):" << A.compare(B)<< endl;
s1.push_back('a');//队尾添加字符
s1.insert(s1.begin(),'1');//在制定的位置pos前插入字符char
}
5.map
//map 一种映射关系,可以建立string型到int型的映射,就好比数组一样
//map需要确定映射类型(键key)和映射后类型(值value)
void solve()
{
map<string,int>mp;
mp["a"]=1; //会覆盖掉原关键字的值
cout<<mp["a"]<<endl;
map<string,int>::iterator it;
for(it=mp.begin(); it!=mp.end(); it++)
{
cout<<it->first<<" "<<it->second<<endl;
}
map<string,int>::reverse_iterator it2;
for(it2=mp.rbegin(); it2!=mp.rend(); it2++)
{
cout<<it2->first<<" "<<it2->second<<endl;
}
mp.clear();
mp.erase("b");
mp.erase(mp.begin(),mp.end());
cout<<mp.size()<<" "<<mp.empty()<<endl;
}
6.stack
//栈 后进先出
void solve()
{
stack<int>st;
st.push(1);
while(!st.empty())
{
cout<<st.top()<<endl;
st.pop();
}
}
7.set
//set译为集合,是一个内部自动递增排序且去除了重复元素的容器
void solve()
{
int p[10]={1,2,3,4,5,6};
set<int>st1(p,p+10);
set<int>st;
st.insert(1);
st.erase(1);//删除值为1的元素
//二分查找
cout<<"第一个大于等于0的值:"<<*st.lower_bound(0)<<endl;
cout<<"第一个大于0的值:"<<*st.upper_bound(0)<<endl;
set<int>::iterator it1;
for(it1=st.begin();it1!=st.end();it1++)
{
cout<<" "<<*it1<<endl;
}
set<int>::reverse_iterator it2;
for(it2=st.rbegin();it2!=st.rend();it2++)
{
cout<<" "<<*it2<<endl;
}
cout<<st.size()<<" "<<st.count(1)<<endl;
it1=st.find(2);
st.erase(it1,st.end());
st.clear();
}
8.pair
//pair是将2个数据合成一个数据
int cmp1(pair<int,int>a,pair<int,int>b)
{
if(a.first!=b.first)
return a.first>b.first; //根据first降序
else
return a.second<b.second; //根据second升序
}
struct cmp2
{
bool operator()(const pair<int,int> q1,const pair<int,int>q2)
{
if(q1.first==q2.first)
return q1.second>q2.second; //根据second升序
else
return q1.first<q2.first; //根据first降序
}
};
void solve()
{
pair<int,int>p1;
p1=make_pair(1,3);
cout<<p1.first<<" "<<p1.second<<endl;
pair<int,int>p2[10];
p2[1]=make_pair(2,4);
cout<<p2[1].first<<" "<<p2[1].second<<endl;
vector<pair<int,int> >p3;
p3.push_back({1,11});
sort(p3.begin(),p3.end(),cmp1);
int len=p3.size();
for(int i=0; i<len; ++i)
{
cout<<p3[i].first<<" "<<p3[i].second<<endl;
}
priority_queue<pair<int,int>,vector<pair<int,int> >,cmp2>p4;
p4.push({2,2});
while(!p4.empty())
{
cout<<p4.top().first<<" "<<p4.top().second<<endl;
p4.pop();
}
}