迭代器的解釋&&set和multiset
莫名其妙的,要看stl了
不得不說,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返回第一個大於當前值的元素的迭代器
時間複雜度和二分相同
不予舉例
啊,終於碼完了,暫時寫到這裡,以後不夠再補充