后台开发:核心技术与应用实践3.5.2 set的查增删

3.5.2 set的查增删

例3.31演示了set的查增删。

【例3.31】 set的查增删。

#include
<iostream>

#include
<string>

#include
<set>

#include
<string.h>

#include
<iterator>

using namespace
std;

struct strLess{

    bool operator() (const char *s1, const char
*s2) const {

    return strcmp(s1, s2) < 0;

   }

};

void
printSet(set<int> s){

    copy(s.begin(), s.end(),
ostream_iterator<int>(cout, ", ") );

    /*

    set<int>::iterator iter;

    for (iter = s.begin(); iter != s.end();
iter++)

       
cout<<"set["<<iter-s.begin()<<"]="<<*iter<<",
"; // Error

    cout<<*iter<<", ";

    */

    cout<<endl;

}

 

int main(){

    /*创建set对象,共5种方式,提示如果比较函数对象及内存分配器未出现,即表示采用的是系统默认

      方式*/

    /*创建空的set对象,元素类型为int,*/

    set<int> s1;

    /*创建空的set对象,元素类型char*,比较函数对象(即排序准则)为自定义strLess*/

    set<const char*, strLess> s2(
strLess);

    /*利用set对象s1,拷贝生成set对象s2*/

    set<int> s3(s1);

    /*用迭代区间[&first, &last)所指的元素,创建一个set对象*/

    int iArray[] = {13, 32, 19};

    set<int> s4(iArray, iArray + 3);

    /*用迭代区间[&first, &last)所指的元素,及比较函数对象strLess,创建一个set对象*/

    const char* szArray[] = {"hello",
"dog", "bird" };

    set<const char*, strLess> s5(szArray,
szArray + 3, strLess() );

    /*元素插入:

    1,插入value,返回pair配对对象,可以根据.second判断是否插入成功。(提示:value不能与set容器内元素重复)

    pair<iterator, bool> insert(value)

    2,在pos位置之前插入value,返回新元素位置,但不一定能插入成功

    iterator insert(&pos, value)

    3,将迭代区间[&first, &last)内所有的元素,插入到set容器

    void insert[&first, &last);

    */

    cout<<"s1.insert() :
"<<endl;

    for (int i = 0; i <5 ; i++)

        s1.insert(i*10);

    printSet(s1);

 

    cout<<"s1.insert(20).second =
"<<endl;

    if (s1.insert(20).second)

        cout<<"Insert
OK!"<<endl;

    else

        cout<<"Insert Failed!"<<endl;

    cout<<"s1.insert(50).second =
"<<endl;

    if (s1.insert(50).second){

        cout<<"Insert
OK!"<<endl;

        printSet(s1);

    }else

        cout<<"Insert
Failed!"<<endl;

   
cout<<"pair<set<int>::iterator, bool> p;\np =
s1.insert(60);\nif (p.second):"<<endl;

    pair<set<int>::iterator, bool>
p;

    p = s1.insert(60);

    if (p.second){

        cout<<"Insert
OK!"<<endl;

        printSet(s1);

    }

    else

        cout<<"Insert
Failed!"<<endl;

 

    /*元素删除

    1,size_type erase(value) 移除set容器内元素值为value的所有元素,返回移除的元素个数

    2,void erase(&pos) 移除pos位置上的元素,无返回值

    3,void erase(&first, &last) 移除迭代区间[&first, &last)内的元素,无返回值

    4,void clear(), 移除set容器内所有元素*/

    cout<<"\ns1.erase(70) =
"<<endl;

    s1.erase(70);

   
printSet(s1);

    cout<<"s1.erase(60) =
"<<endl;

    s1.erase(60);

    printSet(s1);

 

    cout<<"set<int>::iterator
iter = s1.begin();\ns1.erase(iter) = "<<endl;

    set<int>::iterator iter = s1.begin();

    s1.erase(iter);

    printSet(s1);

 

    /*元素查找

    count(value)返回set对象内元素值为value的元素个数

    iterator find(value)返回value所在位置,找不到value将返回end()

    lower_bound(value),upper_bound(value),
equal_range(value)*/

    cout<<"\ns1.count(10) =
"<<s1.count(10)<<", s1.count(80) =
"<<s1.count(80)<<endl;

    cout<<"s1.find(10) : ";

    if (s1.find(10) != s1.end())

       
cout<<"OK!"<<endl;

    else

        cout<<"not
found!"<<endl;

 

    cout<<"s1.find(80) : ";

    if (s1.find(80) != s1.end())

       
cout<<"OK!"<<endl;

    else

        cout<<"not
found!"<<endl;

    /*其他常用函数*/

   
cout<<"\ns1.empty()="<<s1.empty()<<",
s1.size()="<<s1.size()<<endl;

    set<int> s9;

    s9.insert(100);

    cout<<"s1.swap(s9)
:"<<endl;

    s1.swap(s9);

    cout<<"s1: "<<endl;

    printSet(s1);

    cout<<"s9: "<<endl;

    printSet(s9);

    return 0;

}

程序的执行结果如图3-7所示。

例3.31中,有set的初始化、插入、查找、删除、遍历等方法的演示,接下来再进行详细说明。

(1)set对象的创建方式有5种,如下所述。

1)创建空的set对象,元素类型为int:

set<int>
s1;

2)创建空的set对象,元素类型char*,比较函数对象(即排序准则)为自定义strLess:

set<const
char*, strLess> s2( strLess);

3)利用set对象s1,拷贝生成set对象s2:

set<int>
s3(s1);

4)用迭代区间[&f?irst, &last)所指的元素,创建一个set对象:

int iArray[] =
{13, 32, 19};

set<int>
s4(iArray, iArray + 3);

5)用迭代区间[&f?irst, &last)所指的元素,及比较函数对象strLess,创建一个set对象:

const char*
szArray[] = {"hello", "dog", "bird" };

set<const
char*, strLess> s5(szArray, szArray + 3, strLess() );

(2)元素插入的3种方式,如下所述。

1)插入value,返回pair配对对象,可以根据.second判断是否插入成功。(注意:value不能与set容器内元素重复)

2)在pos位置之前插入value,返回新元素位置,但不一定能插入成功。

3)将迭代区间[&f?irst, &last)内所有的元素,插入到set容器。

(3)元素删除的4种方式,如下所述。

1)size_type erase(value)移除set容器内元素值为value的所有元素,返回移除的元素个数。

2)void erase(&pos)移除pos位置上的元素,无返回值。

3)void erase(&f?irst, &last)移除迭代区间[&f?irst, &last)内的元素,无返回值。

4)void clear(),移除set容器内所有元素。

(4)元素查找的2种方式,如下所述。

1)count(value)返回set对象内元素值为value的元素个数。

2)iterator f?ind(value)返回value所在位置,找不到value将返回end()。

(5)其他set中的常用方法。

begin(),返回set容器的第一个元素

end(),返回set容器的最后一个元素

clear(),删除set容器中的所有的元素

empty(),判断set容器是否为空

max_size(),返回set容器可能包含的元素最大个数

size(),返回当前set容器中的元素个数

rbegin(),返回的值和end()相同

rend(),返回的值和rbegin()相同

时间: 2024-10-22 07:43:53

后台开发:核心技术与应用实践3.5.2 set的查增删的相关文章

后台开发:核心技术与应用实践

后台开发:核心技术与应用实践 徐晓鑫 著 图书在版编目(CIP)数据 后台开发:核心技术与应用实践 / 徐晓鑫著. -北京:机械工业出版社,2016.8 ISBN 978-7-111-54339-8 I. 后- II. 徐- III. 网络-开发 IV. TP393.092 中国版本图书馆CIP数据核字(2016)第167884号 后台开发:核心技术与应用实践 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编辑:李 艺 责任校对:董纪丽 印 刷: 版 次:

后台开发:核心技术与应用实践导读

后台开发:核心技术与应用实践 徐晓鑫 著 图书在版编目(CIP)数据 后台开发:核心技术与应用实践 / 徐晓鑫著. -北京:机械工业出版社,2016.8 ISBN 978-7-111-54339-8 I. 后- II. 徐- III. 网络-开发 IV. TP393.092 中国版本图书馆CIP数据核字(2016)第167884号 后台开发:核心技术与应用实践 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编辑:李 艺 责任校对:董纪丽 印 刷: 版 次:

Android开发:优化ListView实践解析

 在看了一些vogella的文章之后,发现关于android listview性能优化这一段很有意思,于是实践了一下,经过优化,性能确实提升不少! 先看看优化前和优化后的比较: 优化前的log截图: 开发:优化ListView实践解析-"> 优化后的log截图: 并且,在不停滚动ListView的过程中,优化之前会出现ANR现象,在AVD上特别容易复现: 然后,优化后显得很流畅,附上对于的log截图: 下面附上相关代码分析: ListView中的每一个Item由一个ImageView 和一

android-Android后台开发相关书籍资料

问题描述 Android后台开发相关书籍资料 Android APP后台搭建过程,如何使用开发语言实现,请推荐相关书籍,谢谢. 解决方案 <第一行代码> <疯狂Android讲义> <Android群英传> <Android开发艺术探究> 解决方案二: 后台开发相关书籍Android各层开发推荐书籍及资料(转)Android相关开发资料汇总 解决方案三: http://www.jikexueyuan.com/course/2208.html 解决方案四: 深

mysql-app后台开发,如何做好安全性?

问题描述 app后台开发,如何做好安全性? app后台开发一枚,现在要对整个项目做一些安全性,比如拦截非法请求,sql注入什么的 后台开发技术:spring + mybatis + mysql 求一些思路.麻烦了. 解决方案 比如检查密码的sql语句一定要处理特殊字符? = ' 等等,最后还是要写file.将你所设想到的情况全写下来.后期安全还有问题再添加. 解决方案二: 最好安卓请求时要带上自己的用户信息 解决方案三: 接口的话,多加一些加密处理了,然后在登录的时候带token,再就是服务器的

linux 后台开发-后台开发需要些什么东西

问题描述 后台开发需要些什么东西 我是一名大三的学生,想做后台开发,但是又不知道该从哪方面做起.目前Linux c/c++都学的不错,数据结构也学过,SQL.socket网络通信也学过,TCP/IP协议也有一定了解,然后,下一步不知道该干嘛了,我觉得自己学的这些东西比较基础,都不知道怎么怎么能把它们应用实际.望各位大牛能指点迷津 解决方案 这看你想做哪方面的了.linux服务器开发维护,数据库开发维护,网站后台web开发(javawebphp.net等) 解决方案二: 你所学的仅仅是基础,多看看

Linux 后台开发工作中常用的开源库

后台开发,语言主要是 c 和 c++ , 这里简单罗列一下工作中用的很频繁的那些开源软件 1. OpenSSL openssl OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. 下载地址: https://www.openssl.org/source/ 2.TinyXML tinyxml 简单,高效,灵活的一套操作 XML 文件的开源库. 下载地址: http://www.grinninglizar

javascript-App后台开发用哪种语言

问题描述 App后台开发用哪种语言 我想问开发一个APP的后台,想实现的功能有实时聊天,图片,视频的上传和下载等, 用java写好,还是其他的好 解决方案 java.php.python.c++.....很多,建议使用java,轮子多,效率高,也可以用python,简单,效率也不低 解决方案二: 后台有很多选择,如果你熟悉android,那么当然选java,那是你熟悉的语言,如果你熟悉js,可以用node.js,其它的语言还有C# VB PHP Ruby Python Go ... 解决方案三:

ios-iOS APP后台开发技术问题请教

问题描述 iOS APP后台开发技术问题请教 如果要搭建一个IOS应用(假设用户量为几十万)的后台服务器,现在比较靠谱的后台架构是怎样的? (先说说我现在的理解,之前做过一些Android开发的事情,当时后台是写了一个简单的Http服务器(利用Netty实现),然后前端和后台的数据交换采用json实现,至于服务器硬件的配置等等没有过考虑.所以我现在可以认识到的后台,就是HTTP请求+Json返回数据.) 想请教一下各位:从服务器硬件到操作系统再到后台技术框架,有没有一个比较系统.成熟.可靠的模式

Java后台开发精选知识图谱

引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开始就对整个学习路线有宏观.简洁的认识,确定大的学习方向,这样才能事半功倍. 我们经常会遇到这样的情况: 一开始学习一门新技术的时候,面对着很多很多陌生的名词,无从下手,一度想要放弃. 本文首先会给出关于java后台开发和前端适配的一些建议学习路线,接着简单解释一些应用到的高频技术,帮助大家理解和学习,算是一个入门篇. Java后台开发知识一览 1.后端