STL中几种典型容器的操作

1.  遍历函数 (顺序容器共用)。

template<typename T>
void Display(T x)
{
	for (auto it=x.begin(); it != x.end(); ++it)
		cout << *it << " ";
	cout << endl;
}

2. vector的用法。

void UseOfVector(void)
{
	int a[] = {8, 3, 7, 9, 4, 0, 7, 4, 1, 5};
	 // -------------------初始化-------------------
	vector<int> vec1;								 //默认初始化,vec1为空
	vector<int> vec2(vec1);						 //使用vec1初始化vec2
	vector<int> vec3(vec1.begin(),vec1.end());		 //使用vec1初始化vec2
	vector<int> vec4(10);							 //10个值为0的元素
	vector<int> vec5(10,4);						 //10个值为4的元素
	vector<string> vec6(10,"null");				 //10个值为null的元素
	vector<string> vec7(10,"hello");				 //10个值为hello的元素
	vector<int> v8(a, a+10);
	Display<vector<int> >(v8);

	// ---------------------遍历--------------------
	for (int ii=0; ii != v8.size(); ++ii)
		cout << v8[ii] << " ";
	cout << endl;

	for (auto it=v8.begin(); it != v8.end(); ++it)
		cout << *it << " ";
	cout << endl;

	// --------------------操作-------------------
	v8.push_back(15);					// 添加
	Display<vector<int> >(v8);
	bool ret = v8.empty();				// 判断是否为空
	v8.insert(v8.end(), 5, 3);			// 插入,从v8.end()开始,插入5个值为3的元素
	Display<vector<int> >(v8);
	v8.pop_back();						//  删除末尾元素
	Display<vector<int> >(v8);
	v8.erase(v8.end()-4, v8.end());		// 删除迭代器之间的元素
	Display<vector<int> >(v8);
	v8.clear();							//  清空容器
	Display<vector<int> >(v8);
}
3. string的用法。
void UseOfString(void)
{
	char a[] = {'y', 'w'};
	// -------------------------初始化--------------------------------
	string s1, s5, s6, s7;					//默认构造函数,s1为空串
	string s2(s1);							//将s2初始化为s1的一个副本
	string s3("Hello");						//将s3初始化一个字符串面值副本
	string s4(10,'c');						// 将s4 初始化为字符'c'的n个副本
	/*cin>>s5;								//读取有效字符到遇到空格
	getline(cin,s6);							//读取字符到遇到换行,空格可读入,知道‘\n’结束
	getline(cin,s7,'a');						//一个直到‘a’结束,其中任何字符包括'\n'都能够读入
	Display<string> (s7);*/

	// ------------------------操作--------------------------
	bool ret = s4.empty();
	int size = s4.size();
	int len = s4.length();
	cout << ret << " "  << size<< " " << len << endl;

	auto it = s4.begin();
	s4.insert(0, "yw");						//把字符串s插入到pos之前的位置
	Display<string> (s4);
	s4.insert(0, a, 2);						//下标pos之前插入a数组的前len个元素。
	Display<string> (s4);
	reverse(s4.begin(), s4.end());			// 翻转
	Display<string> (s4);
	auto pos = s4.find("yw" ) ;				// 发现第一次出现yw的位置,并返回其下标值
	cout << pos << endl;
	string tmp = s4.substr(pos, 2);		// 截取s串中从pos开始的长为len的子串  
	cout << tmp <<endl;
	Display<string> (s4);
	s4.erase(pos, 2);						// 删除pos后长为len的元素,默认删除所有元素。
	Display<string> (s4);
}

4. string与int的相互转换。

// ------------int转string-------------
stringstream streamIntToStr;
string s;
int a = 123456;
streamIntToStr << a;
streamIntToStr >> s;
// ----------string转int--------------
stringstream streamStrToInt;
string s("123456");
int a ;
streamStrToInt << s;
streamStrToInt >> a;
// ------带逗号的字符串转数组----------
string s1;
getline(cin, s1);

vector<int> v;
stringstream input(s1);
string tmp;

while (getline(input, tmp, ','))
{
	if ( ! tmp.empty())
		v.push_back(stoi(tmp));
}

5. list的用法。

void UseOfList(void)
{
	int a[] = {8, 3, 7, 9, 4, 0, 7, 4, 1, 5};

	// ---------------------初始化----------------------
	list<int> lst1;							//创建空list
	list<int> lst2(3);						 //创建含有三个元素的list
	list<int> lst3(3,2);						//创建含有三个元素的值为2的list
	list<int> lst4(lst2);						//使用lst2初始化lst4
	list<int> lst5(lst2.begin(),lst2.end());	// 使用迭代器初始化
	list<int> lst6(a, a+10);					// 使用数组初始化
	Display<list<int> > (lst6);

	// --------------------遍历只能使用迭代器---------------------
	for (auto it=lst6.begin(); it != lst6.end(); ++it)
		cout << *it << " ";
	cout << endl;

	// -----------------------操作------------------------
	bool ret = lst6.empty();					   // 判断是否为空
	int len = lst6.size();					   // 确定大小
	lst6.push_back(15);                               // 后面添加
	Display<list<int> > (lst6);
	lst6.pop_back();						   // 删除末尾元素
	Display<list<int> > (lst6);
	lst6.insert(lst6.begin(), 5, 3);			   //  插入
	Display<list<int> > (lst6);
	lst6.remove(4);							   //  删除值为4的节点
	Display<list<int> > (lst6);
	lst6.reverse();							   //  翻转
	Display<list<int> > (lst6);
	lst6.sort();								   //  排序
	Display<list<int> > (lst6);
	lst6.unique();							    // 删除相邻重复元素
	Display<list<int> > (lst6);
	lst6.clear();							    // 清空
	Display<list<int> > (lst6);
}

6. map的用法。

template<typename T, typename U>
void DisplayMap(map<T, U> m1)
{
	for (auto it=m1.begin(); it != m1.end(); ++it)
	{
		cout << "("<<it->first << ", ";
		cout << it->second << ") " << endl;
	}
	cout << endl;
}
template<typename T, typename U>
bool CmpByValue(const pair<T, U> &m1, const pair<T, U> &m2)  // 二元谓词
{
	return m1.second < m2.second;
}
void UseOfMap(void)
{
	// ----------创建------------
	map<int, string> m1;

	// -------------添加------------------
	m1.insert(pair<int, string>(1, "clx"));                           // map的结果默认是按照key来进行排序的。
	m1.insert(pair<int, string>(2, "hx"));
	m1.insert(map<int, string>::value_type(6, "lj"));        
	m1.insert(map<int, string>::value_type(3, "yw"));
	m1.insert(make_pair(4, "ppp"));
	m1.insert(make_pair(5, "xp"));
	m1[7] = "312";
	m1[8] = "326";
	
	// ---------------遍历-----------------
	DisplayMap<int, string> (m1);

	// ---------------删除---------------
	m1.erase(7);								// 删除关键字为k的元素
	DisplayMap<int, string> (m1);
	auto it = m1.begin();
	int size = m1.size();
	while (--size)
		++it;
	cout << it->second << " "<<size << endl;
	m1.erase(it);								// 使用迭代器来进行删除
	DisplayMap<int, string> (m1);

	// ----------------------获取map的最后一个元素-------------------
	auto it2 = m1.end();
	--it2;
	cout << it2->second << endl;

	// ----------------将map按照value来进行排序-----------------
	vector<pair<int, string> > v1(m1.begin(), m1.end());    // 将map中的元素转存到vector中。
	sort(v1.begin(), v1.end(), CmpByValue<int, string>);   // 传递自己定义的谓词版本。
	for (int ii=0; ii<v1.size(); ++ii)
	{
		cout << "(" << v1[ii].first << ", " << v1[ii].second << ")"<< endl;
	}
}

输出结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值