目录
定义
set不同于vector,strin,list这种存储容器,set是一种关联式容器,底层是搜二叉;
功能
set可以确定唯一的值,可以排序+去重。
接口
insert()
#include <iostream>
#include<set>
using namespace std;
int main(int argc, char** argv) {
set<int>s;
s.insert(10);
s.insert(2);
s.insert(4);
s.insert(1);
set<int> ::iterator it=s.begin();
for(;it<=s.end();it++)
{
cout<<*it<<" ";
}cout<<endl;
return 0;
}
警告:
原因:
在C++中,std::set是一个有序的容器,它使用红黑树实现。s.end()返回的是指向最后一个元素之后的位置的迭代器,而不是指向最后一个元素本身的迭代器。因此,将it与s.end()进行比较时,应该使用不等于操作符!=而不是小于等于操作符<=。
如果你使用it <= s.end()作为循环条件,当it指向最后一个元素之后的位置时,循环将继续执行,这将导致访问超出s的边界,引发未定义的行为。为了避免这种情况,应该使用it != s.end()作为循环条件,确保只在it指向有效元素时循环执行。
修改:
set<int> ::iterator it=s.begin();
for(;it!=s.end();it++)
{
cout<<*it<<" ";
}cout<<endl;
s.insert(10);
s.insert(2);
s.insert(4);
s.insert(1);
第二个1没有插入进去。
之前讲过set底层是一棵搜二叉,搜二叉特点cur比root大往右插,比root小往左插。
找到为空的地方插入节点,如果发现cur与root的value相同,那就返回false;
怎么接收返回值的?