不定期更新


题面 , 题目大意就是给一堆数字,将其排列,使组成的数字最小.

\(①\) \(:\) 将其直接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) .

迭代器 \(:\) 容器中确定地址 (浅显理解)