迭代器的解釋&&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返回第一個大於當前值的元素的迭代器
時間複雜度和二分相同
不予舉例


啊,終於碼完了,暫時寫到這裏,以後不夠再補充

發佈了35 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章