C++ STL之set容器使用方法Word文件下载.docx
- 文档编号:20414208
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:19.28KB
C++ STL之set容器使用方法Word文件下载.docx
《C++ STL之set容器使用方法Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++ STL之set容器使用方法Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
key_type
Thefirsttemplateparameter(T)
value_type
key_compare
Thesecondtemplateparameter(Compare)
defaultsto:
less<
key_type>
value_compare
value_type>
allocator_type
Thethirdtemplateparameter(Alloc)
allocator<
reference
allocator_type:
:
forthedefault
allocator:
value_type&
const_reference
constvalue_type&
pointer
value_type*
const_pointer
constvalue_type*
iterator
a
bidirectionaliterator
to
convertibleto
const_iterator
constvalue_type
reverse_iterator
reverse_iterator<
iterator>
const_reverse_iterator
const_iterator>
difference_type
asignedintegraltype,identicalto:
iterator_traits<
usuallythesameas
ptrdiff_t
size_type
anunsignedintegraltypethatcanrepresentanynon-negativevalueof
size_t
关于这个无需多言,切记set中的iterator是指向const元素。
2set中构造相关函数
empty
(1)
explicitset(constkey_compare&
comp=key_compare(),
constallocator_type&
alloc=allocator_type());
explicitset(constallocator_type&
alloc);
range
(2)
template<
classInputIterator>
set(InputIteratorfirst,InputIteratorlast,
constkey_compare&
=allocator_type());
copy(3)
set(constset&
x);
x,constallocator_type&
move(4)
set(set&
&
initializerlist(5)
set(initializer_list<
il,
以上分别为默认构造函数,范围构造函数,复制构造函数,移动构造函数,初始化列表构造函数,其中最后两个是C++11中的版本。
关于构造函数,不同的编译器可能提供的形式不一样,但是种类都是这几种。
构造函数示例:
#include<
iostream>
set>
boolfncomp(intlhs,intrhs){returnlhs<
rhs;
}
structclasscomp{
booloperator()(constint&
lhs,constint&
rhs)const
{returnlhs<
};
intmain()
{
std:
set<
int>
first;
//emptysetofints
intmyints[]={10,20,30,40,50};
second(myints,myints+5);
//range
third(second);
//acopyofsecond
fourth(second.begin(),second.end());
//iteratorctor.
int,classcomp>
fifth;
//classasCompare
bool(*fn_pt)(int,int)=fncomp;
int,bool(*)(int,int)>
sixth(fn_pt);
//functionpointerasCompare
return0;
3set中的迭代器
beginReturniteratortobeginning
(publicmemberfunction)
endReturniteratortoend
rbeginReturnreverseiteratortoreversebeginning
rendReturnreverseiteratortoreverseend
cbegin
Returnconst_iteratortobeginning
cend
Returnconst_iteratortoend
crbegin
Returnconst_reverse_iteratortoreversebeginning
crend
Returnconst_reverse_iteratortoreverseend
关于迭代器也没什么好说的,迭代器和前面的都一样。
4set中的容量相关函数
emptyTestwhethercontainerisempty
sizeReturncontainersize
max_sizeReturnmaximumsize
这个和其它容量一样。
5set中元素修改函数
insertInsertelement
eraseEraseelements
swapSwapcontent
clearClearcontent
emplace
Constructandinsertelement
emplace_hint
Constructandinsertelementwithhint
insert函数
singleelement
(1)
pair<
iterator,bool>
insert(constvalue_type&
val);
insert(value_type&
withhint
(2)
iteratorinsert(const_iteratorposition,constvalue_type&
iteratorinsert(const_iteratorposition,value_type&
range(3)
voidinsert(InputIteratorfirst,InputIteratorlast);
initializerlist(4)
voidinsert(initializer_list<
il);
要注意其中的函数的返回类型,这个在编程中或许会很有用,两种不同的颜色来区分C++11中增加的函数,示例如下:
myset;
iteratorit;
std:
ret;
//setsomeinitialvalues:
for(inti=1;
i<
=5;
++i)myset.insert(i*10);
//set:
1020304050
ret=myset.insert(20);
//nonewelementinserted
if(ret.second==false)it=ret.first;
//"
it"
nowpointstoelement20
myset.insert(it,25);
//maxefficiencyinserting
myset.insert(it,24);
myset.insert(it,26);
//nomaxefficiencyinserting
intmyints[]={5,10,15};
//10alreadyinset,notinserted
myset.insert(myints,myints+3);
cout<
<
"
mysetcontains:
"
;
for(it=myset.begin();
it!
=myset.end();
++it)
'
<
*it;
\n'
结果:
5101520242526304050
erase函数
(1)
voiderase(iteratorposition);
(2)
size_typeerase(constvalue_type&
(3)
voiderase(iteratorfirst,iteratorlast);
iteratorerase(const_iteratorposition);
iteratorerase(const_iteratorfirst,const_iteratorlast);
红色表格表示C++98,蓝色表示C++11。
函数的返回值,其中第二个函数表示删除的元素的个数,当然在set中其返回值最多是1,在C++11中,其余两个函数皆有返回值为iterator类型的值,其指向删除的最后一个元素,或者指向set的末尾。
示例如下:
//insertsomevalues:
10;
i++)myset.insert(i*10);
//102030405060708090
it=myset.begin();
++it;
pointsnowto20
myset.erase(it);
myset.erase(40);
it=myset.find(60);
myset.erase(it,myset.end());
103050
clear函数
voidclear();
清空set,容器大小变为0
swap函数
voidswap(set&
交换两个set的内容
emplace函数
class...Args>
pair<
emplace(Args&
...args);
这个是C++11中的函数,也是插入一个元素
emplace_hint函数
iteratoremplace_hint(const_iteratorposition,Args&
在一定的位置插入元素,position参数只是用来提高插入的速度,并不一定就是说要在此处插入元素。
示例
string>
autoit=myset.cbegin();
myset.emplace_hint(it,"
alpha"
);
it=myset.emplace_hint(myset.cend(),"
omega"
it=myset.emplace_hint(it,"
epsilon"
beta"
for(conststd:
string&
x:
myset)
x;
alphabetaepsilonomega
6set中的比较函数体
key_compReturncomparisonobject
value_compReturncomparisonobject
这两个函数都是获取set容器中比较函数
6.1key_com函数
key_comparekey_comp()const;
函数返回比较函数对象,默认的是升序排列。
示例:
inthighest;
key_comparemycomp=myset.key_comp();
for(inti=0;
i++)myset.insert(i);
highest=*myset.rbegin();
iteratorit=myset.begin();
do{
}while(mycomp(*(++it),highest));
01234
6.2value_com函数
value_comparevalue_comp()const
函数返回元素比较函数对象,默认的是升序排列,在set中,value_comp函数和key_value函数的作用一模一样。
value_comparemycomp=myset.value_comp();
inthighest=*myset.rbegin();
7set的其他操作函数
findGetiteratortoelement
countCountelementswithaspecificvalue
lower_boundReturniteratortolowerbound
upper_boundReturniteratortoupperbound
equal_rangeGetrangeofequalelements
get_allocatorGetallocator
7.1find函数
find(constvalue_type&
val)const;
(C++98)
(C++11)
(C++11)
函数返回找到元素的iterator,如果找不到就指向set的末尾
it=myset.find(20);
myset.erase(myset.find(40));
7.2count函数
size_typecount(constvalue_type&
函数返回值为val的元素的个数,当然在set容器中其最大为1.示例:
#inc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ STL之set容器使用方法 STL set 容器 使用方法