博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL阶段练习(简单电话簿功能模仿)
阅读量:6581 次
发布时间:2019-06-24

本文共 5547 字,大约阅读时间需要 18 分钟。

源代码:

View Code
// STLPhonBook.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" using namespace std; enum MenuOptionSelect {
InsertContactsetEnity=0, DisplayEntries=1, FindNumber=2, DeleteConnect=3, QuitApplation=4 }; struct ContactItem {
string strYouName; string strYouNumber; ContactItem(const string & strName,const string &strNumber) {
strYouName=strName; strYouNumber=strNumber; } bool operator == (const ContactItem &itemToCompare) const {
return (itemToCompare.strYouName==this->strYouName); } bool operator < (const ContactItem & itemtoCompare) const {
return (this->strYouName
& setConnects); void FindConnect(const set
& setConnects); void DelateConnects(set
& setConnects); int _tmain(int argc, _TCHAR* argv[]) {
set
setConnects; int nUserSelection=InsertContactsetEnity; //实现的就是为了一直循环 供用户选择 知道选择 结束程序 while(nUserSelection=ShowMenu()!=(int)QuitApplation) {
switch(nUserSelection) {
case InsertContactsetEnity: setConnects.insert(GetConnectInfo()); cout<<"电话薄更新成功!"<
& setConnects) {
cout<<"* * * * * * * 电话簿信息 * * * * * * *"<
::const_iterator iterConnect=setConnects.begin(); while(iterConnect!=setConnects.end()) { cout<<"姓名:"<
strYouName<<" 电话:"<
strYouNumber<
>"; string strName; cin>>strName; string strPhonNumber; cout<
<<"的电话号码:>>"; cin>>strPhonNumber; return ContactItem(strName,strPhonNumber); } int ShowMenu() { cout<<"**** * * * * ***欢迎,请选择***** * * * *******"<
>"; int nYourSelect=0; cin>>nYourSelect; cout<
& setConnects) { cout<<"@@@@@@@@@@@@@@@@@@@@@22"<
>"<
>strName; set
::const_iterator iterFind=setConnects.find(ContactItem(strName,"")); if (iterFind!=setConnects.end()) { cout<
<<" 被找到!电话号码:"<
strYouNumber<
& setConnects) { cout<<"你喜爱删除谁的信息捏??"<
>"<
>strName; size_t nDelet=setConnects.erase(ContactItem(strName,"")); if (nDelet>0) { cout<
<<"删除了!"<

这个礼拜学习了STL简单应用,仿照例子写了一个模仿电话簿功能的set的应用。

自己照着例子做的STL的简单应用。牛人不需要,俺是给新手们分享的。

而且看了这个公开课,就试着以自顶向下的方式分析一下自己的代码,并分析自己碰到的问题。

首先是需求,我要做一个控制台下的电话簿,可以有一个菜单,里面存数据,删除数据,显示数据,搜索数据的功能(主要是为了应用STL)

所以我先定义了一个while循环

1 while(nUserSelection=ShowMenu()!=(int)QuitApplation)  2     {
3 switch(nUserSelection) 4 {
5 case 0: 6 setConnects.insert(GetConnectInfo()); //获取输入的值 7 cout<<"电话薄更新成功!"<

这时候需要一个电话簿的类了。为了简单,我写了结构体,

1 struct ContactItem  2 {
3 string strYouName; 4 string strYouNumber; 5 6 ContactItem(const string & strName,const string &strNumber) 7 {
8 strYouName=strName; 9 strYouNumber=strNumber; 10 } 11 12 bool operator == (const ContactItem &itemToCompare) const 13 {
14 return (itemToCompare.strYouName==this->strYouName); 15 } 16 17 bool operator < (const ContactItem & itemtoCompare) const 18 {
19 return (this->strYouName

结构体中,在set的的排序中我为了默认以名字的排序,重载了"<" 使得按照字母的顺序排列。

这样以来,我们就可以操作一个  ContactItem 类型的set对象了。下面一个一个实现功能。

1.获取输入的值:实现输入姓名以及电话,所以函数返回值为 ContactItem 。

1 ContactItem GetConnectInfo()  2 {
3 cout<<"请输入名字:>>"; 4 string strName; 5 cin>>strName; 6 string strPhonNumber; 7 8 cout<
<<"的电话号码:>>"; 9 cin>>strPhonNumber; 10 return ContactItem(strName,strPhonNumber);//构造 11 }

2.显示所有保存的数据 : 遍历容器的所有内容,并打印。

用到迭代器:指向赋值容器的指针。所以操作迭代器就实现了遍历容器了。个人喜欢while,只有到中间的某个位置的时候,才会用for循环。(不担心位置问题)

1 void DisplayConnectSet(const set
& setConnects) 2 {
3 cout<<"* * * * * * * 电话簿信息 * * * * * * *"<
::const_iterator iterConnect=setConnects.begin(); 7 while(iterConnect!=setConnects.end()) 8 {
9 cout<<"姓名:"<
strYouName<<" 电话:"<
strYouNumber<

3.查找。find.

STL中定义: iterator find ( const key_type& x ) const;返回迭代器的类型,适合定位及显示。
1 void FindConnect(const set
& setConnects) 2 {
3 cout<<"@@@@@@@@@@@@@@@@@@@@@22"<
>"<
>strName; 8 9 set
::const_iterator iterFind=setConnects.find(ContactItem(strName,"")); 10 if (iterFind!=setConnects.end()) 11 {
12 cout<
<<" 被找到!电话号码:"<
strYouNumber<
4.删除 erase。
void erase ( iterator position );size_type erase ( const key_type& x );     void erase ( iterator first, iterator last );
分别用来传入迭代器删除、值删除(返回删除的个数,当然set不会又重复的,如果Muitiset的话就可以有好几个了)。
1 void DelateConnects(set
& setConnects) 2 {
3 cout<<"你喜爱删除谁的信息捏??"<
>"<
>strName; 8 9 size_t nDelet=setConnects.erase(ContactItem(strName,"")); 10 11 if (nDelet>0) 12 {
13 cout<
<<"删除了!"<
这样,几个功能实现了,每个函数里面达到了原语级别。不用再往下分解。
另外,在switch中,为了编程的可读性强,定义一下枚举类型,
1 enum MenuOptionSelect 2 {
3 InsertContactsetEnity=0, 4 DisplayEntries=1, 5 FindNumber=2, 6 DeleteConnect=3, 7 QuitApplation=4 8 };
实现了可读性强的效果。 这就是我这几天学习的东西,发出来给新手看的,STL简单应用。
之后,也碰到了一些编译上的问题:
while循环中 忘记加括号。
while(nUserSelection=ShowMenu()!=(int)QuitApplation)
调试是nUserSelection 值始终是 1,首先判断ShowMenu() 与 (int)QuitApplation)是否相等,并返回结果给 nUserSelection
加上括号 while((nUserSelection=ShowMenu())!=(int)QuitApplation)
过程相当于 
nUserSelection=ShowMenu() while(nUserSelection!=(int)QuitApplation)
源程序:http://115.com/file/dpvawrhi#

转载于:https://www.cnblogs.com/leisure/archive/2012/03/24/2415918.html

你可能感兴趣的文章
Cassandra——一些比较和回想
查看>>
YII2.0_fecshop 源码和在线演示地址
查看>>
ipone 网页版的iphone
查看>>
c#开发_Dev的lookupedit绑定和获取值的方法
查看>>
UISegmentedControl 分段控制器 详解
查看>>
git 学习笔记
查看>>
循环链表,约瑟夫环问题
查看>>
Spring事务管理2----编程式事务管理
查看>>
vsCode怎么为一个前端项目配置ts的运行环境
查看>>
优化Web中的性能
查看>>
【SAP BusinessObjects】WEBI中的动态求和,累加函数的使用
查看>>
python3 CERTIFICATE_VERIFY_FAILED错误 certificate verify failed
查看>>
微软职位内部推荐-Senior SDE
查看>>
unity 人工智能AI,装备解锁临时笔记
查看>>
OOP 2.2 构造函数
查看>>
矩阵的坐标变换(转)
查看>>
Tomcat 服务器性能优化
查看>>
【框架学习】ibatis DAO框架分析
查看>>
Android Design Support Library使用详解
查看>>
Java历程-初学篇 Day03扫描仪与类型转换
查看>>