TopCoder竞赛:C++, STL 用法快速入门
发表于: 开源– 2009/06/272002年就开始参加TopCoder的算法竞赛。当时一周举行两次,每个房间12个人参加比赛,前三名都有现金奖励。有空参加一下,练练算法,给头脑保鲜。
下面总结了一些题目中常用的STL库的用法。
#include <algorithm> #include <string> #include <vector> #include <map> #include <iostream> using namespace std; //递归 int GetN(int n) { if (n==1) return 1; else return GetN(n-1); } void TestSTL_main( int argc, char* argv[] ) //void main( int argc, char* argv[] ) { /******** STL **********/ //string的用法 { string s = "mmmmm"; string s2("ss22"); s2.insert(2,"kkkkk"); //把"kkkkk"插到s2的第2个位置之前(位置从0开始) s2+=s+"44444"+'c'; const char *pc = s.c_str();//把string转成C-style的string,以\0终了 const char *ptr1 = s.data();;//把string转成字符串 if (s2[2] == 'k') s2[2]='C'; s+="jkl"; s+='m'; s.push_back('\n'); //把'\n'(换行符)放在s的最后一个位置 reverse(s.begin(), s.end()); //反转 basic_string <char>::iterator str_Iter; //遍历 str_Iter = s.begin(); } //vector的用法 { vector<int> v; v.push_back(8); //向v中插入元素,元素的值是8 int iLen = (int)v.size(); for(int i=0;i<iLen;i++) { int k = v[0]; //k==8 } } //map的用法 { map<int, int> mp; for(int i=0;i<3;i++) { mp[i]=i*2; //通过[第一个元素]来访问第二个元素 } int total = 100; map<int, int>::iterator it = mp.begin(); for(;it!=mp.end();it++) //遍历mp { total+=it->second; //通过iterator it来访问第二个元素 } cout<<"total="<<total<<endl; } //算法 int n = GetN(5); //递归n!=n*(n-1)*(n-2)*…*1 int aa=10,bb=15; int maxi = max(aa,bb); //最大值 int mini = min(aa,bb); //最小值 int absi = abs(-12); //绝对值 vector<string> v; v.push_back("hello"); v.push_back("123"); v.push_back("no"); sort(v.begin(),v.end()); //按照字母顺序,把v里面的元素排序 int savei; sscanf(v[0].c_str(), "%d", &savei); //把字符串“123”转换成数字123 cout<<"savei="<<savei<<endl; char buf[100]; sprintf(buf,"v[1]=%d",savei); //把内容打印进字符串 cout<<"buf="<<buf<<endl; }