小米5s换小米6以后以前的公交卡怎么转移

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
c++ STL中的set容器再给另一个set变量赋值后,两个变量中的元素是分别储存的吗?如set a,b;.;b=a;此时修改b中的元素,会对a中的元素产生影响吗?我用g++和vc++编译,都不会有影响,但是否【任何Windows和Linux环境下】【所有的c++的编译器】都没有影响呢?
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
不会有影响,这是两份独立的拷贝.【任何Windows和Linux环境下】【所有的c++的编译器】都是这样的,因为C++标准库是这样定义的,所以任何编译器在实现标准库的时候都会遵守这条规则
为您推荐:
其他类似问题
扫描下载二维码2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
2013年5月 高性能开发大版内专家分月排行榜第二2013年4月 高性能开发大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。(相同的值不存,存进去自动排序好了)
set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复(重复元素只操作一遍,其他的忽略处理),而后者允许。(因为插入的时候,它们分别调用的是insert和unique_insert)
同理,map和multimap也是这个意思。set、map它们的底层都是基于红黑树。
set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。
平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值从小到大的顺序排列。
set的各成员函数列表如下:
c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器
c++ stl容器set成员函数:clear()--清除所有元素
c++ stl容器set成员函数:count()--返回某个值元素的个数
c++ stl容器set成员函数:empty()--如果集合为空,返回true
c++ stl容器set成员函数:end()--返回指向最后一个元素的迭代器
c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器
c++ stl容器set成员函数:erase()--删除集合中的元素
c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器
c++ stl容器set成员函数:get_allocator()--返回集合的分配器
c++ stl容器set成员函数:insert()--在集合中插入元素
c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数
c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值
c++ stl容器set成员函数:rbegin()--返回指向集合中最后一个元素的反向迭代器
c++ stl容器set成员函数:rend()--返回指向集合中第一个元素的反向迭代器
c++ stl容器set成员函数:size()--集合中元素的数目
c++ stl容器set成员函数:swap()--交换两个集合变量
c++ stl容器set成员函数:upper_bound()--返回大于某个值元素的迭代器
c++ stl容器set成员函数:value_comp()--返回一个用于比较元素间的值的函数
set的常用操作:(在set中查找是使用二分查找)
1、创建set集合对象
<span style="color: # #include&iostream&
<span style="color: # #include&set&
<span style="color: # using namespace
<span style="color: # int main()
<span style="color: # {
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: # }
2、元素的插入与中序遍历  采用inset()方法把元素插入到集合中,插入规则在默认的比较规则下,是按元素值从小到大插入,如果自己指定了比较规则函数,则按自定义比较规则函数插入。使用前向迭代器对集合中序遍历,结果正好是元素排序后的结果。
1 #include&iostream&
2 #include&set&
3 using namespace
4 int main()
s.insert(<span style="color: #); //第一次插入5,可以插入
s.insert(<span style="color: #);
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #); //第二次插入5,重复元素,不会插入
<span style="color: #
set&int&:: //定义前向迭代器
<span style="color: #
//中序遍历集合中的所有元素
<span style="color: #
for(it = s.begin(); it != s.end(); it++)
<span style="color: #
<span style="color: #
cout && *it && " ";
<span style="color: #
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: # }
<span style="color: # //运行结果:1 3 5 6
3、元素的反向遍历  使用反向迭代器reverse_iterator可以反向遍历集合,输出的结果正好是集合元素的反向排序结果。它需要用到rbegin()和rend()两个方法,它们分别给出了反向遍历的开始位置和结束位置。
1 #include&iostream&
2 #include&set&
3 using namespace
4 int main()
s.insert(<span style="color: #); //第一次插入5,可以插入
s.insert(<span style="color: #);
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #); //第二次插入5,重复元素,不会插入
<span style="color: #
set&int&::reverse_ //定义反向迭代器
<span style="color: #
//反向遍历集合中的所有元素
<span style="color: #
for(rit = s.rbegin(); rit != s.rend(); rit++)
<span style="color: #
<span style="color: #
cout && *rit && " ";
<span style="color: #
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: # }
<span style="color: # //运行结果:6 5 3 1
4、元素的删除  与插入元素的处理一样,集合具有高效的删除处理功能,并自动重新调整内部的红黑树的平衡。删除的对象可以是某个迭代器位置上的元素、等于某键值的元素、一个区间上的元素和清空集合。
1 #include&iostream&
2 #include&set&
3 using namespace
4 int main()
s.insert(<span style="color: #); //第一次插入5,可以插入
s.insert(<span style="color: #);
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #); //第二次插入5,重复元素,不会插入
<span style="color: #
s.erase(<span style="color: #); //删除键值为6的元素
<span style="color: #
set&int&::reverse_ //定义反向迭代器
<span style="color: #
//反向遍历集合中的所有元素
<span style="color: #
for(rit = s.rbegin(); rit != s.rend(); rit++)
<span style="color: #
<span style="color: #
cout && *rit && " ";
<span style="color: #
<span style="color: #
<span style="color: #
set&int&:://定义正向迭代器
<span style="color: #
<span style="color: #
it = s.begin();
<span style="color: #
for(int i = <span style="color: #; i & <span style="color: #; i++)
<span style="color: #
it = s.erase(it); //删除正向前两个元素,只剩下最后元素5
<span style="color: #
for(it = s.begin(); it != s.end(); it++)
<span style="color: #
cout && *it && " ";
<span style="color: #
<span style="color: #
<span style="color: #
s.clear();//清空set
<span style="color: #
cout && s.size() &&
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: # }
<span style="color: # /*
<span style="color: # 运行结果:
<span style="color: # <span style="color: # 3 1
<span style="color: # <span style="color: #
<span style="color: # <span style="color: #
<span style="color: # */
5、元素的检索  使用find()方法对集合进行检索,如果找到查找的的键值,则返回该键值的迭代器位置;否则,返回集合最后一个元素后面的一个位置,即end()。
1 #include&iostream&
2 #include&set&
3 using namespace
4 int main()
s.insert(<span style="color: #); //第一次插入5,可以插入
s.insert(<span style="color: #);
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #); //第二次插入5,重复元素,不会插入
<span style="color: #
set&int&::
<span style="color: #
it = s.find(<span style="color: #); //查找键值为6的元素
<span style="color: #
if(it != s.end())
<span style="color: #
cout && *it &&//找到输出要找的元素的值
<span style="color: #
<span style="color: #
cout && "not find it" &&
<span style="color: #
it = s.find(<span style="color: #);
<span style="color: #
if(it != s.end())
<span style="color: #
cout && *it &&
<span style="color: #
<span style="color: #
cout && "not find it" &&
<span style="color: #
return <span style="color: #;
<span style="color: # }
<span style="color: # /*
<span style="color: # 运行结果:
<span style="color: # <span style="color: #
<span style="color: # not find it
<span style="color: # */
下面的方法也能判断一个值是否在set中存在
1 #include &cstdio&
2 #include &set&
3 using namespace
4 int main() {
for(int i = <span style="color: #; i & <span style="color: #; i++)
s.insert(i);
for(int i = <span style="color: #; i & <span style="color: #; i++) {
<span style="color: #
scanf("%d", &a);
<span style="color: #
if(!s.count(a)) //不存在
<span style="color: #
printf("does not exist\n");
<span style="color: #
<span style="color: #
printf("exist\n");
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: # }
6、自定义比较函数
  使用insert将元素插入到集合中去的时候,集合会根据设定的比较函数奖该元素放到该放的节点上去。在定义集合的时候,如果没有指定比较函数,那么采用默认的比较函数,即按键值从小到大的顺序插入元素。但在很多情况下,需要自己编写比较函数。
编写比较函数有两种方法。
(1)如果元素不是结构体,那么可以编写比较函数。下面的程序比较规则为按键值从大到小的顺序插入到集合中。
1 #include&iostream&
2 #include&set&
3 using namespace
4 //自定义比较函数mycomp,重载操作符 ()
5 struct mycomp
bool operator() (const int &a, const int &b)
return a &
//从大到小排序
<span style="color: #
//return a &
//从小到大排序
<span style="color: #
<span style="color: # };
<span style="color: # int main()
<span style="color: # {
<span style="color: #
set&int, mycomp& //采用比较函数mycomp
<span style="color: #
s.insert(<span style="color: #); //第一次插入5,可以插入
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #); //第二次插入5,重复元素,不会插入
<span style="color: #
set&int,mycomp&::
<span style="color: #
for(it = s.begin(); it != s.end(); it++)
<span style="color: #
cout && *it && " ";
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: # }
<span style="color: # /*
<span style="color: # 运行结果:6 5 3 1
<span style="color: # */
(2)如果元素是结构体,那么可以直接把比较函数写在结构体内。
1 #include&iostream&
2 #include&set&
3 #include&string&
4 using namespace
5 struct Info
bool operator & (const Info &a) const // 重载“&”操作符,自定义排序规则
<span style="color: #
<span style="color: #
//按score由大到小排序。如果要由小到大排序,使用“&”即可。
<span style="color: #
return a.score &
<span style="color: #
<span style="color: # };
<span style="color: # int main()
<span style="color: # {
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
//插入三个元素
<span style="color: #
info.name = "Jack";
<span style="color: #
info.score = <span style="color: #;
<span style="color: #
s.insert(info);
<span style="color: #
info.name = "Tom";
<span style="color: #
info.score = <span style="color: #;
<span style="color: #
s.insert(info);
<span style="color: #
info.name = "Steaven";
<span style="color: #
info.score = <span style="color: #;
<span style="color: #
s.insert(info);
<span style="color: #
<span style="color: #
set&Info&::
<span style="color: #
for(it = s.begin(); it != s.end(); it++)
<span style="color: #
cout && (*it).name && " : " && (*it).score &&
<span style="color: #
return <span style="color: #;
<span style="color: # }
<span style="color: # /*
<span style="color: # 运行结果:
<span style="color: # Tom : 99
<span style="color: # Jack : 80
<span style="color: # Steaven : 60
<span style="color: # */
7、equal_range()&的使用&,返回一对定位器,分别表示第一个大于或等于给定关键值的元素和第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值。
1 #include &iostream&
2 #include &set&
4 using namespace
6 int main()
set&int&::
<span style="color: #
for(int i = <span style="color: # ; i &= <span style="color: #; ++i)
<span style="color: #
<span style="color: #
s.insert(i);
<span style="color: #
<span style="color: #
for(iter = s.begin() ; iter != s.end() ; ++iter)
<span style="color: #
<span style="color: #
cout&&*iter&&" ";
<span style="color: #
<span style="color: #
<span style="color: #
pair&set&int&::const_iterator,set&int&::const_iterator&
<span style="color: #
pr = s.equal_range(<span style="color: #);
<span style="color: #
cout&&"第一个大于等于 3 的数是 :"&&*pr.first&&
<span style="color: #
cout&&"第一个大于 3的数是 : "&&*pr.second&&
<span style="color: #
return <span style="color: #;
<span style="color: # }
运行结果:
8、erase(iterator)& ,删除定位器iterator指向的值
 & erase(first,second),删除定位器first和second之间的值
&&&& erase(key_value),删除键值key_value的值
1 #include &iostream&
2 #include &set&
4 using namespace
6 int main()
set&int&::const_
<span style="color: #
set&int&::
<span style="color: #
set&int&::
<span style="color: #
for(int i = <span style="color: # ; i &= <span style="color: # ; ++i)
<span style="color: #
<span style="color: #
s.insert(i);
<span style="color: #
<span style="color: #
//第一种删除
<span style="color: #
s.erase(s.begin());
<span style="color: #
//第二种删除
<span style="color: #
first = s.begin();
<span style="color: #
second = s.begin();
<span style="color: #
<span style="color: #
<span style="color: #
s.erase(first,second);
<span style="color: #
//第三种删除
<span style="color: #
s.erase(<span style="color: #);
<span style="color: #
cout&&"删除后 set 中元素是 :";
<span style="color: #
for(iter = s.begin() ; iter != s.end() ; ++iter)
<span style="color: #
<span style="color: #
cout&&*iter&&" ";
<span style="color: #
<span style="color: #
<span style="color: #
return <span style="color: #;
<span style="color: # }
运行结果:
小结:&set中的删除操作是不进行任何的错误检查的,比如定位器的是否合法等等,所以用的时候自己一定要注意。
9、lower_bound(key_value)&&,返回第一个大于等于key_value的定位器
&&&& upper_bound(key_value),&返回最后一个大于等于key_value的定位器
1 #include &iostream&
2 #include &set&
4 using namespace
6 int main()
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
s.insert(<span style="color: #);
<span style="color: #
cout&&*s.lower_bound(<span style="color: #)&&
<span style="color: #
cout&&*s.lower_bound(<span style="color: #)&&
<span style="color: #
cout&&*s.upper_bound(<span style="color: #)&&
<span style="color: #
return <span style="color: #;
<span style="color: # }
运行结果:
阅读(...) 评论()}

我要回帖

更多关于 小米5s呼叫转移 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信