1. 程式人生 > >迭代器的解釋&&set和multiset

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

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