不定期更新
题面 , 题目大意就是给一堆数字,将其排列,使组成的数字最小.
\(①\) \(:\) 将其直接sort
, 再按顺序排列会有问题,比如样例中的 \(32\) \(321\) ,\(32132\) 的字典序就小于 \(32321\) 的字典序, 这时利用 cmp : a+b < b+a
即可.
bool cmp(string a,string b) {return a+b<b+a;}
\(②\) \(:\) 去前导零利用好 erase
函数.
while(ans.length()&&ans[0]=='0')
ans.erase(ans.begin());
if(ans.length()==0) cout<<"0";
cout<<ans;
关于 erase
函数
\(①\) \(:\) 字符数组是不能使用这个函数的.
\(②\) \(:\) erase(pos,n)
删除从 \(pos\) 位置开始包括 \(pos\) 在内的连续的 \(n\) 个字符.
\(③\) \(:\) erase(pos)
删除pos处字符,要注意这里与 \(①\) 不同的是,这里的 \(pos\) 是迭代器. 例如删除 \(1\) 位置的字符 ,我们只能写 erase(a.begin()+1)
,而不能写 erase(1)
.
\(④\) \(:\) erase(first,end)
删除区间 \([first,end]\) 的字符 ,同样注意迭代器的问题. 例如 erase(a.begin()+1,a.end()-1)
.
迭代器 \(:\) 容器中确定地址 (浅显理解)