TopCoder竞赛:C++, STL 用法快速入门

2002年就开始参加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;
 
}

DeliciousDiggFacebookStumbleUponFriendFeedMySpaceTechnorati FavoritesTwitterLinkedInRedditGoogle BookmarksMixxShare
标签: , ,

关于 Harry

关注产品管理,敏捷,Google,iPhone等领域。