之前用STL容器都是看着别人的博客直接学着用的,这次看着手册学一下
begin():返回指向容器第一个元素的指针。由于容器一直都是有序的,所以begin指向的元素是按一定排序标准排序后的第一个元素
iterator begin() noexcept;
end():指向past-the-end元素,即容器最后一个元素后边的一个元素
iterator end() noexcept;
rbegin():反向开头,同std::end()
reverse_iterator rbegin() noexcept;
rend():反向结尾,同std::begin()
reverse_iterator rend() noexcept;
注意配套的指针
#include<iostream>
#include<set>
using namespace std;
int main(){
int myints[]={75,23,65,42,13};
set<int> myset(myints,myints+5);
for(set<int>::iterator it=myset.begin();it!=myset.end();it++){
cout<<" "<<*it;
}
cout<<endl;
for(set<int>::reverse_iterator it=myset.rbegin();it!=myset.rend();it++){
cout<<" "<<*it;
}
cout<<endl;
return 0;
}
结果为:
clear():清空set的所有元素,使其大小为0
void clear() noexcept;
count( i ):查找set中键值 i 出现的次数,由于set中每个元素都是唯一的,所以最后只会返回0或1,可用来判断 i 是否存在
size_type count (const value_type& val) const;
emplace( i ):
pair<iterator,bool> emplace (Args&&... args)
插入元素。如果插入成功,返回一个pair(first,second),first是一个指向新插入元素的指针,second为true;
若未插入成功,则说明该set已经存在一个和i相等的元素,返回pair(first,second),first为指向与i相等的元素的指针,second为false
#include<iostream>
#include<set>
using namespace std;
int main(){
set<string> my;
my.emplace("foo");
my.emplace("ttt");
auto ret=my.emplace("foo");
auto ret2=my.emplace("ccc");
cout<<ret.second<<endl;
cout<<ret2.second<<endl;
return 0;
}
empty():判断容器是否为空,若为空返回true,否则返回false
bool empty() const noexcept;
lower_bound(val):返回指向set中第一个大于等于val的元素的指针
iterator lower_bound (const value_type& val);
upper_bound(val):返回指向set中第一个大于val的元素的值的指针
iterator upper_bound (const value_type& val);
equal_range(val): 返回一对指针,指针的第一个等于lower_bound,第二个等于upper_bound
pair<iterator,iterator> equal_range (const value_type& val);
erase():从set中移除单个元素或者一个范围内的元素。参数可能是一个位置,一个值,或者一个范围
(1) | iterator erase (const_iterator position); |
---|---|
(2) | size_type erase (const value_type& val); |
(3) | iterator erase (const_iterator first, const_iterator last); 移除的是[first,last)范围的元素 |
#include<iostream>
#include<set>
using namespace std;
int main() {
set<int> myset;
set<int>::iterator it;
// insert some values:
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
it = myset.begin();
++it; // "it" points now to 20
myset.erase (it);
myset.erase (40); // 10 30 50 60 70 80 90
cout << "myset contains:";
for (it=myset.begin(); it!=myset.end(); ++it)
cout << ' ' << *it;
cout << '\n';
it = myset.find (60);
myset.erase (it, myset.end()); //10 30 50
cout << "myset contains:";
for (it=myset.begin(); it!=myset.end(); ++it)
cout << ' ' << *it;
cout << '\n';
return 0;
}
find(val):在set中查找等于value的元素,如果找到的话,返回指向这个元素的指针,如果没找到,返回end();
iterator find (const value_type& val);
insert(val): 插入一个值为val的元素
single element (1) | pair<iterator,bool> insert (const value_type& val); pair<iterator,bool> insert (value_type&& val); |
---|
insert(positon,val):在给定位置插入一个元素
with hint (2) | iterator insert (const_iterator position, const value_type& val); iterator insert (const_iterator position, value_type&& val); |
---|
insert(first,last):将给定指针中的内容插入到set中
range (3) | template <class InputIterator> void insert (InputIterator first, InputIterator last); |
---|
#include<iostream>
#include<set>
using namespace std;
int main() {
set<int> myset;
set<int>::iterator it;
pair<std::set<int>::iterator,bool> ret;
// set some initial values:
for (int i=1; i<=5; ++i) myset.insert(i*10); // set: 10 20 30 40 50
ret = myset.insert(20); // no new element inserted
if (ret.second==false) it=ret.first; // "it" now points to element 20
myset.insert (it,25); // max efficiency inserting
myset.insert (it,24); // max efficiency inserting
myset.insert (it,26); // no max efficiency inserting
int myints[]= {5,10,15}; // 10 already in set, not inserted
myset.insert (myints,myints+3);
std::cout << "myset contains:";
for (it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
swap(seta):交换两个set的值
int myints[]={12,75,10,32,20,25};
std::set<int> first (myints,myints+3); // 10,12,75
std::set<int> second (myints+3,myints+6); // 20,25,32
first.swap(second);