迭代器的解释&&set和multiset
2016-07-13 17:09
393 查看
莫名其妙的,要看stl了
不得不说,stl是一个优秀的东西。
虽然TA慢……
不过,可以省去好多东西啦。
下面切入正题。。。
注意:迭代器的可用基本操作符有 *(取当前迭代器所对应值,和指针一样),++(类似加等于1,把当前迭代器变为当前迭代器的下一个迭代器),– –(类似减等于1,把当前迭代器变为当前迭代器的前一个迭代器),==(逻辑符号),!=(逻辑符号),=(赋值)
set存入数据时,如果数据重复,会覆盖。
multiset不会。
(这是老师讲的,不对勿喷)
TA们同开一个库:
函数基本相同。
插入,复杂度log(n)
格式:
还有一种读入方法
erase
删除,复杂度log(n)
格式:
find
查找,返回元素迭代器
格式:
begin
容器的首元素(容器中的最小元素)的迭代器
格式:
end
容器结束的迭代器
注:不是容器末元素
格式:
begin和end并用遍历容器
示例:
size
容器元素的个数
格式:
rbegin和rend
反向迭代器
在此定义下,迭代器++操作变为把当前迭代器变为当前迭代器的前一个迭代器,– –操作同理
rbegin为容器反向首元素,同end
rend为容器反向末元素,同begin
不予举例
empty
是否为空,为空返回true,不为空返回false
不予举例
count
返回当前值在容器中出现的次数
格式:
lower_bound和upper_bound
lower_bound返回第一个大于等于当前值的元素的迭代器
upper_bound返回第一个大于当前值的元素的迭代器
时间复杂度和二分相同
不予举例
啊,终于码完了,暂时写到这里,以后不够再补充
不得不说,stl是一个优秀的东西。
虽然TA慢……
不过,可以省去好多东西啦。
下面切入正题。。。
迭代器
迭代器简单来说就是stl中的地址。是一种复杂的指针。#include<set> { std::set <int>::iterator op;//定义迭代器op op = myset.find(5); if(op != myset.end())//如果在容器中找得到这一元素 { myset.erase(op);//删除这一元素 } return 0; }
注意:迭代器的可用基本操作符有 *(取当前迭代器所对应值,和指针一样),++(类似加等于1,把当前迭代器变为当前迭代器的下一个迭代器),– –(类似减等于1,把当前迭代器变为当前迭代器的前一个迭代器),==(逻辑符号),!=(逻辑符号),=(赋值)
set和multiset的区别
是的,TA们实际上是一个东西,区别在哪呢?set存入数据时,如果数据重复,会覆盖。
multiset不会。
(这是老师讲的,不对勿喷)
TA们同开一个库:
#include<set>
函数基本相同。
常用相关函数
insert插入,复杂度log(n)
格式:
#include<set> int main() { std::set <int> myset; myset.insert(1);//插入“1” return 0; }
还有一种读入方法
#include<set> int main() { int s[]={0,1,2,3,4,5,6}; std::set <int> myset(s+1,s+7); return 0; }
erase
删除,复杂度log(n)
格式:
#include<set> int main() { std::set <int> myset1; std::multiset <int> myset2; myset1.erase(1);myset2.erase(1); //在set中,此操作删除为1的元素 //在multiset中,此操作删除所有为1的元素 //在multiset中,可以用迭代器删除单个元素(见上面迭代器栏) return 0; }
find
查找,返回元素迭代器
格式:
#include<set> int main() { std::set <int> myset; std::set <int>::iterator op; op=myset.find(5);//op为查找到的第一个5的迭代器 return 0; }
begin
容器的首元素(容器中的最小元素)的迭代器
格式:
#include<set> int main() { std::set <int> myset; std::set <int>::iterator op; op=myset.begin();//op为容器首元素的迭代器 return 0; }
end
容器结束的迭代器
注:不是容器末元素
格式:
#include<set> int main() { std::set <int> myset; std::set <int>::iterator op; op=myset.end();//op为容器结束的迭代器 return 0; }
begin和end并用遍历容器
示例:
#include<cstdio> #include<set> int main() { int s[]={5,21,56,13,14}; std::set <int> myset(s,s+5); for(std::set <int>::iterator it=myset.begin(); it!=myset.end();it++) //因为it是迭代器,所以此处循环条件必为!=不能为< printf(" %d",*it); return 0; }
size
容器元素的个数
格式:
#include<set> int main() { std::set <int> myset; int cnt=myset.size();//cnt为容器中元素的个数 }
rbegin和rend
反向迭代器
在此定义下,迭代器++操作变为把当前迭代器变为当前迭代器的前一个迭代器,– –操作同理
rbegin为容器反向首元素,同end
rend为容器反向末元素,同begin
不予举例
empty
是否为空,为空返回true,不为空返回false
不予举例
count
返回当前值在容器中出现的次数
格式:
#include<set> int main() { std::set <int> myset; int a=myset.count(5);//a为容器中5出现的次数 }
lower_bound和upper_bound
lower_bound返回第一个大于等于当前值的元素的迭代器
upper_bound返回第一个大于当前值的元素的迭代器
时间复杂度和二分相同
不予举例
啊,终于码完了,暂时写到这里,以后不够再补充
相关文章推荐
- 设计模式之行为型模式 - 调用行为的传递问题
- Ruby中的迭代器详解
- Ruby中Block和迭代器的使用讲解
- set 命令特殊用法
- Lua中的迭代器浅析
- Lua中的迭代器和泛型for介绍
- 深入解读Lua中迭代器与泛型for的使用
- You must SET PASSWORD before executing this statement的解决方法
- C#特性-迭代器(上)及一些研究过程中的副产品
- C#迭代器模式(Iterator Pattern)实例教程
- 批处理 Set 命令详解 让你理解set命令第1/2页
- ASP中set与dim的区别(自己的理解)
- 深入C#中get与set的详解
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- sql Set IDENTITY_INSERT的用法
- 详解C++中的vector容器及用迭代器访问vector的方法
- 浅析iterator与指针的区别
- set_include_path在win和linux下的区别
- Lua中的迭代器和泛型for学习总结