C++标准模板库:STL代码示例练习

2024年2月3日   内容整理自《程序设计教程:  用C++语言编程 第三版》 陈家骏  郑滔

---------------------------------------------------------------------------------------------------------------------------------

C++标准模板库==STL==Standard Template Library

STL包含:

  • 容器:同类元素长度可变的序列,用于储存数据,是类模板
  • 算法:函数模板,用于操作数据
  • 迭代器:用于访问容器中的元素,是抽象指针类模板

  为了提高算法与容器之间的相互独立性,在STL中算法作用的参数不是容器,而是迭代器,在算法中通过迭代器来访问和遍历容器中的元素。迭代器起到了容器和算法之间的桥梁作用,它使得一个算法可以作用于多种容器,从而保证了算法的通用性。

---------------------------------------------------------------------------------------------------------------------------------

【例1】STL的vector容器中的一些操作示例

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
int main(){
   vector<int> ve;//创建一个vector类容器对象ve,其中的元素为int型
   int x;
   cin>>x;
   while(x>0){
       ve.push_back(x);//往容器ve的尾部增加元素x
       cin>>x;
   }
   
   //创建容器ve的迭代器
   vector<int>::iterator it1=ve.begin();//使迭代器it1指向ve的第一个位置
   
   vector<int>::iterator it2=ve.end();//使迭代器it2指向ve的最后一个元素的下一个位置
   
   //显然如下算法接受的参数都是迭代器
   
   //调用算法“max_element”计算ve中的最大元素
   cout<<"Max element in vector ve is:"<<*max_element(it1,it2)<<endl;
   
   //调用算法"accumulate"计算并输出容器ve中所有元素的和
   cout<<"Sum in vector ve="<<accumulate(it1,it2,0)<<endl;
   
   //调用算法sort对容器ve中的元素进行排序
   sort(it1,it2);
   cout<<"Sorted result is :\n"<;
    for_each(it1,it2,[](int x){
        cout<<x<<' ';
        return;
    });//注意这个函数的第三个参数
  //
    return 0;
}

---------------------------------------------------------------------------------------------------------------------------------

//算法的#定义:
  一般算法用#include <algorithm>
  算数算法用#include <numeric>

---------------------------------------------------------------------------------------------------------------------------------

【例2】利用STL的map容器来实现一个电话号码薄

//2个月后刷LeetCode的时候遇到了!!!过来复习

#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(){
    
    map<string,int>  phone_book;//T1为string,T2为int的模板map,实例化对象phone_book
    //往map里面添加信息
    phone_book["wang"]=13209956788;
    phone_book["zeng"]=13594271400;
    phone_book["liu"]=15586994857;
    
    //输出电话号码薄
    cout<<"电话号码薄的信息如下:\n";
    
    map<string,int>::const_iterator it;//创建一个map的不能够修改所指向元素的迭代器
    
    for(it=phone_book.begin();it!=phone_book.end();it++){//for循环遍历map类容器
        
        cout<<"姓名:"<<it->first<<"电话:"<<it->second<<endl;
        
    }//for
    
    //查找某个人的电话号码
    string name;
    cout<<"请输入要查询的姓名:";
    cin>>name;
    it=phone_book.find(name);
    if(it==phone_book.end())
      cout<<"Can't find name-"<<name;
    else
        cout<<"Found name--"<<it->first<<",His/Her number is:"<<it->second<<endl;
    
    return 0;
}

我们可以使用Find()和Count()方法来发现一个键是否存在。

查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,

分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.
————————————————

                          -------------------------------------------

【例3】例用STL的容器list求解约瑟夫问题(****)

————————————————LetetCoder----

#include <string>
using namespace std;

int main()
{
   std::string str="surpriseMotherfucker";
   std::map<char,int> counter;
	
	for(char c:str){
		//遍历str中的所有字符,
		//统计它们出现的次数并且储存到map容器中
		//如果字符c出现的次数int,不等于map对象counter的最后一个成员
	    if(counter.find(c)!=counter.end()){
			counter[c]++;
		}else{
		    counter[c]=1;//仅出现1次
		}
	}
	
	for(const auto& pair:counter){
	
	std::cout<<"字符"<<pair.first<<"出现的次数为:"<<pair.second<<std::endl;
	}
	
	
   return 0;
}

//这是按照大小写和26字母表顺序给出的

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值