STL常见坑——访问set中最后一个元素

set功能表:

大家都知道set.end()访问最后一个元素,似乎没有任何问题

可是真的是这样吗???

看个例子:

//test
#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> s;
    s.insert(100);
    s.insert(200);
    s.insert(300);
    s.insert(100);
    s.insert(600);
    cout<<"end"<<*s.end()<<endl;

    return 0;
}

结果居然是4??

返回的是set的大小,并不是最后一个元素!


方法一:*s.rbegin()

//test
#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> s;
    s.insert(100);
    s.insert(200);
    s.insert(300);
    s.insert(100);
    s.insert(600);
    cout<<"end: "<<*s.rbegin()<<endl;

    return 0;
}

方法二:迭代器法

//test
#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> s;
    s.insert(100);
    s.insert(200);
    s.insert(300);
    s.insert(100);
    s.insert(600);

    set<int>::iterator iter = s.end();
    iter--;
    cout<<(*iter)<<endl; //打印2
    return 0;
}

必须定义一个迭代器!直接输出end()--是不行的!

//test
#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> s;
    s.insert(100);
    s.insert(200);
    s.insert(300);
    s.insert(100);
    s.insert(600);
    cout<<"end: "<<*(s.end()--)<<endl;

    return 0;
}

输出:

我还没想明白这样为啥不行,如果有知道的dalao跟我说一下呗

发布了298 篇原创文章 · 获赞 301 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/104353542