??xml version="1.0" encoding="utf-8" standalone="yes"?>
int arr[]={1,2,3,4,5};
vector<int>vi;
copy(arr,arr+5,vi.begin());
该语句不会执行,因ؓ没有为vi分配存储I间Q而copy函数使用复制q算W将元素从源拯到目的。STL提供了三U可以将元素插入到目的的q代器,成ؓ插入q代器?/p>
back_inserter:q种q代器调用容器的push_back操作替代赋D符。该q代器的参数是容器本w?/p>
front_inserter:该P代器使用push_front操作替代赋D符。参数是容器本n?/p>
inserter:该P代器使用容器的insert操作替代赋D符。该q代器有两个参数Q第一个参数是容器本nQ第二个参数是容器的一个P代器Q用以指定插入位|?/p>
STL提供了许多函数对象,q些对象包含在头文g<functional>中?/p>
函数对象 | 说明 |
术函数对象Q?/td> | |
plus<T> | x+y |
minus<T> | x-y |
multiplies<T> | x*y |
divides<T> | x/y |
modulus<T> | x%y |
negate<T> | -x |
关系函数对象: | |
equal_to<T> | x==y |
not_equal_to<T> | x!=y |
grater<T> | x>y |
greater_equal<T> | x>=y |
less<T> | x<y |
less_equal<T> | x<=y |
逻辑函数对象: | |
logical_not<T> | !x |
logical_and<T> | x&y |
logical_or<T> | x|y |
0. accumlateQ?/span>iteratorҎ志的序列中的元素之和Q加C个由init指定的初始g。重载的版本不再做加法,而是传进来的二元操作W被应用到元素上?/span>
adjacent_differentQ创Z个新序列Q该序列的每个新值都代表了当前元素与上一个元素的差。重载版本用指定的二元操作计相d素的差?/font>
adjacent_findQ在iteratorҎ志的元素范围内,查找一对相ȝ重复元素Q如果找到返回一?/span>ForwardIteratorQ指向这对元素的W一个元素。否则返?/span>last。重载版本用输入的二元操作W代替相{的判断?/span>
binary_searchQ在有序序列中查?/span>valueQ如果找到返?/span>true。重载的版本使用指定的比较函数对象或者函数指针来判断相等?/span>
copyQ复制序列?/font>
copy_backwardQ除了元素以相反的顺序被拯外,别的?/span>copy相同?/span>
countQ利用等于操作符Q把标志范围cȝ元素与输入的D行比较,q返回相{元素的个数?/font>
count_ifQ对于标志范围类的元素,应用输入的操作符Qƈq回l果?/span>true的次数?/span>
equalQ如果两个序列在范围内的元素都相{,?/span>equalq回true。重载版本用输入的操作W代替了默认的等于操作符?/span>
equal_rangeQ返回一?/span>iteratorQ第一?/span>iterator表示?/span>lower_boundq回?/span>iteratorQ第二个表示?/span>upper_boundq回?/span>iterator倹{?/span>
fillQ将输入的值的拯赋给范围内的每个元素?/font>
fill_nQ将输入的D值给first?/span>frist+n范围内的元素?/span>
findQ利用底层元素的{于操作W,对范围内的元素与输入的D行比较。当匚wӞl束搜烦Q返回该元素的一?/span>InputIterator?/span>
find_ifQ用输入的函数替代了等于操作符执行?/span>find?/span>
find_endQ在范围内查䏀由输入的另外一?/span>iteratorҎ志的W二个序列”的最后一ơ出现。重载版本中使用了用戯入的操作W替代等于操作?/span>
find_first_ofQ在范围内查䏀由输入的另外一?/span>iteratorҎ志的W二个序列”中的Q意一个元素的W一ơ出现。重载版本中使用了用戯定义的操作符?/span>
for_eachQ依ơ对范围内的所有元素执行输入的函数?/font>
generateQ通过对输入的函数gen的连l调用来填充指定的范围?/span>
generate_nQ填?/span>n个元素?/span>
includesQ判?/span>[first1, last1)的一个元素是否被包含在另外一个序列中。用底层元素的<=操作W,重蝲版本使用用户输入的函数?/span>
inner_productQ对两个序列做内U?/span>(对应的元素相乘,再求?/span>)Qƈ内U加C个输入的的初始g。重载版本用了用户定义的操作?/span>
inner_mergeQ合q两个排q序的连l序列,l果序列覆盖了两端范_重蝲版本使用输入的操作进行排序?/font>
iter_swapQ交换两?/span>ForwardIterator的倹{?/span>
lexicographical_compareQ比较两个序列。重载版本用了用户自定义的比较操作?/font>
lower_boundQ返回一?/span>iteratorQ它指向在范围内的有序序列中可以插入指定D不破坏容器序的第一个位|。重载函C用了自定义的比较操作?/span>
maxQ返回两个元素中的较大的一个,重蝲版本使用了自定义的比较操作?/font>
max_elementQ返回一?/span>iteratorQ指出序列中最大的元素。重载版本用自定义的比较操作?/span>
minQ两个元素中的较者。重载版本用自定义的比较操作?/font>
min_elementQ类gmax_elementQ不q返回最的元素?/span>
mergeQ合q两个有序序列,q存攑ֈ另外一个序列中。重载版本用自定义的比较?/font>
mismatchQƈ行的比较两个序列Q指出第一个不匚w的位|,它返回一?/span>iteratorQ标志第一个不匚w的元素位|。如果都匚wQ返回每个容器的last。重载版本用自定义的比较操作?/span>
next_permutationQ取出当前范围内的排列,q将光新排序ؓ下一个排列。重载版本用自定义的比较操作?/font>
nth_elementQ将范围内的序列重新排序Q所有小于第n个元素的元素都出现在它前面,而大于它的都出现在后面,重蝲版本使用了自定义的比较操作?/span>
partial_sortQ对整个序列做部分排序,被排序元素的个数正好可以被放到范围内。重载版本用自定义的比较操作?/font>
partial_sort_copyQ与partial_sort相同Q除了将l过排序的序列复制到另外一个容器?/span>
partial_sumQ创Z个新的元素序列,其中每个元素的g表了范围内该位置之前所有元素之和。重载版本用了自定义操作替代加法?/font>
partitionQ对范围内元素重新排序,使用输入的函敎ͼ把计结果ؓtrue的元素都攑֜l果?/span>false的元素之前?/span>
prev_permutationQ取围内的序列ƈ它重新排序Z一个序列。如果不存在上一个序列则q回false。重载版本用自定义的比较操作?/span>
random_shuffleQ对范围内的元素随机调整ơ序。重载版本输入一个随机数产生操作?/font>
removeQ删除在范围内的所有等于指定的元素Q注意,该函数ƈ不真正删除元素。内|数l不适合使用remove?/span>remove_if函数?/span>
remove_copyQ将所有不匚w的元素都复制C个指定容器,q回?/span>OutputIterator指向被拷贝的末元素的下一个位|?/span>
remove_ifQ删除所有范围内输入操作l果?/span>true的元素?/span>
remove_copy_ifQ将所有不匚w的元素拷贝到一个指定容器?/font>
replaceQ将范围内的所有等?/span>old_value的元素都?/span>new_value替代?/span>
replace_copyQ与replacecMQ不q将l果写入另外一个容器?/span>
replace_ifQ将范围内的所有操作结果ؓtrue的元素用新值替代?/span>
replace_copy_ifQ类greplace_ifQ不q将l果写入另外一个容器?/span>
reverseQ将范围内元素重新按反序排列?/font>
reverse_copyQ类greverseQ不q将l果写入另外一个容器?/span>
rotateQ将范围内的元素Ud容器末尾Q由middle指向的元素成为容器第一个元素?/span>
rotate_copyQ类grotateQ不q将l果写入另外一个容器?/span>
searchQ给Z两个范围Q返回一?/span>iteratorQ指向在范围内第一ơ出现子序列的位|。重载版本用自定义的比较操作?/span>
search_nQ在范围内查?/span>value出现nơ的子序列。重载版本用自定义的比较操作?/span>
set_differenceQ构造一个排q序的序列,其中的元素出现在W一个序列中Q但是不包含在第二个序列中。重载版本用自定义的比较操作?/font>
set_intersectionQ构造一个排q序的序列,其中的元素在两个序列中都存在。重载版本用自定义的比较操作?/font>
set_symmetric_differenceQ构造一个排q序的序列,其中的元素在W一个序列中出现Q但是不出现在第二个序列中。重载版本用自定义的比较操作?/font>
set_unionQ构造一个排q序的序列,它包含两个序列中的所有的不重复元素。重载版本用自定义的比较操作?/font>
sortQ以升序重新排列范围内的元素Q重载版本用了自定义的比较操作?/font>
stable_partitionQ与partitioncMQ不q它不保证保留容器中的相寚w序?/span>
stable_sortQ类gsortQ不q保留相{元素之间的序关系?/span>
swapQ交换存储在两个对象中的倹{?/font>
swap_rangeQ将在范围内的元素与另外一个序列的元素D行交换?/font>
transformQ将输入的操作作用在范围内的每个元素上,q生一个新的序列。重载版本将操作作用在一对元素上Q另外一个元素来自输入的另外一个序列。结果输出到指定的容器?/font>
uniqueQ清除序列中重复的元素,?/span>removecMQ它也不能真正的删除元素。重载版本用了自定义的操作?/span>
unique_copyQ类guniqueQ不q它把结果输出到另外一个容器?/span>
upper_boundQ返回一?/span>iteratorQ它指向在范围内的有序序列中插入value而不破坏容器序的最后一个位|,该位|标志了一个大?/span>value的倹{重载版本用了输入的比较操作?/span>
堆算法:C++标准库提供的?/span>max-heap。一q以下4个泛型堆法?/span>
make_heapQ把范围内的元素生成一个堆。重载版本用自定义的比较操作?/font>
pop_heapQƈ不是真正的把最大元素从堆中弹出Q而是重新排序堆。它?/span>first?/span>last-1交换Q然后重新做成一个堆。可以用容器的back来访问被“弹出“的元素或者?/span>pop_back来真正的删除。重载版本用自定义的比较操作?/span>
push_heapQ假?/span>first?/span>last-1是一个有效的堆,要被加入堆的元素在位|?/span>last-1Q重新生成堆。在指向该函数前Q必d把元素插入容器后。重载版本用指定的比较?/span>
sort_heapQ对范围内的序列重新排序Q它假设该序列是个有序的堆。重载版本用自定义的比较操作?/font>
法 | 说明 |
T accumulate(InIt first,InIt last, T val);
|
q回[first,last)所有元素相加后与val的和
|
T accumulate(InIt first,InIt last, T val, Pred pr);
|
对[first,last)的元素依ơ递归调用prQVn=pr(Vn-1,Ai),V0=T;
|
OutIt adjacent_difference(InIt first,InIt last,OutIt result);
|
对[first,last)的元素依ơ执行Vi=Ai+1-AiQVi存储在result开始的容器里,q回目标区间最后一个元素的下一个位|?/code>
|
OutIt adjacent_difference(InIt first,InIt last,OutIt result, Pred
pr);
|
对[first,last)的元素依ơ执行Vi=pr(Ai+1-Ai)QVi存储在result开始的容器里,q回目标区间最后一个元素的下一个位|?/code>
|
T inner_product(InIt1 first1,InIt1 last1,Init2 first2, T val);
|
对[first1,last1)上的元素AiQ[first2,last2)的元素BiQ递归执行Ti=pr1(Ti-1,pr(Ai,Bi)),其中T-1=valQ返回最后T的|W一UŞ?
?/code>
|
T inner_product(InIt1 first1,InIt1 last1,Init2 first2, T val, Pred1 pr1, Pred2
pr2);
|
|
OutIt partial_sum(InIt first,InIt last,OutIt result);
|
Ri=
∑Aj (0~i),把Ri存储到result开始的位置Q返回目标区间最后一个元素的下个位置
|
OutIt partial_sum(InIt first,InIt last,OutIt result, Pred pr);
|
Ri=pr(Ri-1,Ai),其中R0=*first,
把Ri存储到result开始的位置Q返回目标区间最后一个元素的下个位置
|
堆排序算法:
void make_heap(RanIt
first, RanIt last);
|
|
用[first,last)之间的元素生成一个堆Qpr是用于比较数值的二元函数 | |
void sort_heap(RanIt first, RanIt last);
|
堆排序[first,last)之间的数值序列,pr指定比较数值的二元判定函数
|
void push_heap(RanIt first, RanIt last);
|
|
void pop_heap(RanIt first, RanIt last);
|
法 | 用法 | 说明 |
copy |
OutIt copy(InIt first,InIt last,OutIt x);
|
[firstQlast)之间的元素复制到x指定的位|?/code>
|
copy_backward |
BidIt2 copy_backward(BidIt1 first,BidIt1
last,BidIt2 x);
|
[firstQlast)之间的元素复制到x指定位置的前?/code>
|
fill |
void fill(FwdIt first,FwdIt last,const T& x);
|
[firstQlast)之间的部分用元素x填充
|
fill_n |
void fill_n(OutIt first, Size n,const T& x);
|
从first开始向容器中填充n个元素x
|
generate |
void generate(FwdIt first,FwdIt last, Gen g);
|
调用函数g()填充[firstQlast)之间的元?/code>
|
generate_n |
void generate_n(OutIt first,size n, Gen g);
|
调用函数g()填充从first开始的n个元?/code>
|
remove |
FwdIt remove(FwdIt first,FwdIt last,const T& val);
|
从[firstQlast)中删除元素valQ返回新区间中最后一个元素后的位|?/code>
|
remove_if |
FwdIt remove_if(FwdIt first,FwdIt last, Pred pr);
|
从[firstQlast)中删除所有能使函数prq回true的元素,q回新区间最后一个元素后的位|?/code>
|
remove_copy |
OutIt remove_copy(InIt first,InIt last,OutIt x,const T& val);
|
从[first,last)中删除元素valQƈ把其余的元素复制到x开始的区间中,q回被拷贝的最后一个元素的位置
|
remover_copy_if |
OutIt remove_copy_if(InIt first,InIt last,OutIt x,Pred pr);
|
从[firstQlast)中删除所有能使函数prq回true的元素,q把其余元素复制到x开始的I间Q返回被拯最后一个元素的位置
|
replace |
void replace(FwdIt first,FwdIt last,const T& vold,const T& vnew);
|
用vnew替换[first,last)中所有gؓvold的元?/code>
|
replace_if |
void replace_if(FwdIt first,FwdIt last,Pred pr,const T& val);
|
用val替换[first,last)中所有能使函数prq回true的元?/code>
|
replace_copy |
OutIt replace_copy(InIt first,InIt last,OutIt x,const T& vold,const
T& vnew);
|
把[first,last)中的所有元素复制到以x开始的I间中,如果拯的元素中存在gؓvold的元素,则以vnew替换Q返回拷贝到目标容器的最后一个元素的后一个位|?/code>
|
replace_copy_if |
OutIt replace_copy_if(InIt first,InIt last,OutIt x,Pred pr,const T& val);
|
把[first,last)中的所有元素复制到以x开始的I间中,如果拯的元素中存在能够使函数prq回true的元素,则以vnew替换Q返回拷贝到目标容器的最后一个元素的后一个位|?/code>
|
swap |
void swap(Container &c1,Container &c2);
|
交换容器c1与c2的元?/code>
|
iter_swap |
void iter_swap(FwdIt1 x,FwdIt2 y);
|
交换q代器xQy所指元素的?/code>
|
swap_ranges |
FwdIt2 swap_ranges(FwdIt1 first,FwdIt1 last,FwdIt2
x);
|
用v始于x的连l元素交换区间[first,last)的所有元素,q回W二个区间的最后一个元素的下一个位|?/code>
|
sort |
void sort(RanIt first, RanIt last);
|
区间[first,last)中的元素按升序排序,W二UŞ式pr用于讑֮比较函数
|
merge |
OutIt merge(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt
x);
|
合ƈ两个有序区间[first1,last1)和[first2,last2)Qƈ合q后的元素存储到x开始的容器里,W二UŞ式pr(elem1,elem2)指定比较规则
|
inplace_merge |
void inplace_merge(BidIt first, BidIt middle, BidIt last);
|
合ƈ区间[first,middle)和[middle,last),q将合ƈ后的元素存储到first开始的区间Q第二种形式pr(elem1,elem2)指定比较规则
|
reverse |
void reverse(BidIt first, BidIt last);
|
区间[first,last)的元素顺序倒置
|
reverse_copy |
OutIt reverse_copy(BidIt first, BidIt last,OutIt x);
|
区间[firstQlast)的元素拷贝到x开始的区间Q导致拷贝的元素序Q源区间没有被修改,q回拯到目标区间的最后一个元素的下一个位|?/code>
|
rotate |
void rotate(FwdIt first,FwdIt middle,FwdIt last);
|
交换区间[first,middle)和[middle,last)的元素位|?/code>
|
rotate_copy |
OutIt rotate_copy(FwdIt first,FwdIt middle,FwdIt last,OutIt
x);
|
区间[first,last)的元素拷贝到x开始的容器中,拯时交换[first,middle)和[middle,last)的位|,源区间不发生修改Q返回拷贝到目标区间的最后一个元素的下一?/code>
|
random_shuffle |
void random_shuffle(RanIt first, RanIt last);
|
对区间[first,last)上的元素q行随机排序Qf用于指定排序函数
|
transform |
OutIt transform(InIt first,InIt last,OutIt x, Unop uop);
|
对区间[first,last)上的所有元素执行uop(elem)操作Q结果放Cx开始的区间内,q回拯到目标端的最后一个元素的下一?/code>
|
transform |
OutIt transform(InIt1 first1,InIt1 last1,InIt2 first2,OutIt x, Binop
bop);
|
对区间[first1,last1)和以first2开始的区间的元素执行二元运bop(elem1,elem2)Q结果放Cx开始的区间内,q回拯到目标端的最后一个元素的下一?/code>
|
set_itersection |
OutIt set_intersection(InIt1 first1,InIt1 last1,InIt2 first2,InIt2
last2,OutIt x);
|
求两个区间[first1,last1),[first2,last2)的交集,存储到x开始的容器里,源区间元素没有被修改Qpr用于指定操作函数Q返回拷贝到目标区间的最后一个元素的下一个位|?/code>
|
set_union |
OutIt set_union(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x);
|
求两个区间[first1,last1),[first2,last2)的ƈ集,存储到x开始的容器里,源区间元素没有修改,pr用于指定操作函数Q返回拷贝到目标区间的最后一个元素的下一?/code>
|
set_difference |
OutIt set_difference(InIt1 first1,InIt1 last1,InIt2 first2,InIt2
last2,OutIt x);
|
求两个集合[first1,last1),[first2,last2)的差集,存储到x开始的容器里,源区间元素没有被修改Qpr用于指定操作函数Q返回拷贝到目标区间的最后一个元素的下一个位|?/code>
|
set_symmetric_
difference |
OutIt set_symmetric_difference(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2,OutIt x);
|
求集合[first1,last1),[first2,last2)的对U差Q即QA-BQ?QB-AQ)Q存储到x开始的容器里,源区间元素没有被修改Qpr用于指定操作函数Q返回拷贝到目标区间最后一个元素的下一个位|?/code>
|
׃STL法都是通过q代器间接处理容器,下面定义istream_iteratorInIt,ostream_itreatorOutIt,forward_iteratorFwdIt,bidirectional_iterator BidIt,random_iterator RanIt
非修改算法:
法 | 用法 | 说明 |
adjacent_find
|
FwdIt adjacent_find(FwdIt first,FwdIt last);
|
在[first,last)查找相同元素的首ơ出现或能prQelem,nextElemQؓtrue的元素的位置
Q函数查找成功返回位|,p|q回last
|
binary_search
|
bool binary_search(FwdIt first,FwdIt last,const T& val);
|
在区间[first,last)中查扑օ素valQ如果找到返回trueQ否则返回falseQ第二种形式pr用于讑֮查找准则
|
count |
size_t count(InIt first,InIt last,const T& val);
|
q回区间[first,last)上val出现的次?/code>
|
count_if |
size_t count_if(InIt first,InIt last,Pred pr);
|
q回区间[first,last)上满x件pr(elemQ的元素个数
|
equal |
bool equal(InIt1 first,InIt1 last,InIt2 x);
|
判断[first,last)与x开始的区间的元素是否相{,pr用于指定判断函数
|
equal |
pair<FwdIt,FwdIt> equal_range(FwdIt first,FwdIt
last,const T& val);
|
q回元素valW一ơ出现的位置和最后出现的位置的下一位组成的对,pr指定比较法
|
lower_bound |
FwdIt lower_bound(FwdIt first,FwdIt last,const T&
val);
|
q回已排序序列[first,last)中val首次出现的位|,pr指定比较法
|
upper_bound |
FwdIt upper_bound(FwdIt first,FwdIt last,const T&
val);
|
q回已排序序列[first,last)中val最后一ơ出现的下一个位|,pr指定比较法
|
find |
InIt find(InIt first,InIt last,const T& val);
|
在[first,last)之间查找元素valQ如果找到返回位|,找不到返回last
|
find_if |
InIt find_if(InIt first,InIt last, Pred pr);
|
在[first,last)之间查找能函数prq回true的元素,扑ֈq回位置Q否则返回last
|
find_end |
FwdIt1 find_end(FwdIt1 first1,FwdIt1 last1,FwdIt2 first2,FwdIt2
last2);
|
在[first1Qlast1)之间查找[first2Qlast2)最后出现的位置Q如果找到返回位|,p|q回last1Q第二个函数的pr函数用于比较两个容器的元素,在两个容器的元素相等时返回true
|
find_first_of |
FwdIt1 find_first_of(FwdIt1 first1,FwdIt1 last1,FwdIt2 first2,FwdIt2
last2);
|
在[first1Qlast1)之间查找W一ơ出现[first2Qlast2)中元素的位置Q找到返回位|,p|q回last1Q第二个函数pr用于比较两个容器的元素是否相{?/code>
|
for_each |
Fun for_each(InIt first,InIt last, Fun f);
|
对[first,last)上的所有元素执行函数f(elem),q回值常被忽?/code>
|
includes |
bool includes(InIt1 first1,InIt1 last1,InIt2 first2,InIt2 last2);
|
判断已排序序列[first1,last1)中是否包含区间已排序区间[first2,last2)Qpr指定元素的顺?/code>
|
mismatch |
pair<InIt1,InIt2> mismatch(InIt1 first,InIt1
last,InIt2 x);
|
q回序列[first,last)与x开始的序列W一个不匚w的位|的两个q代器组成的?/code>
|
max |
const T& max(const T& x,const T& y);
|
q回xQy之间的较大者,pr(elem1,elem2)用于指定比较规则
|
max_element |
FwdIt max_element(FwdIt first,FwdIt last);
|
q回区间[first,last)上最大值的位置Qpr(elem1,elem2)用于指定比较规则
|
min |
const T& min(const T& x,const T& y);
|
q回xQy之间的较者,pr(elem1,elem2)用于指定比较规则
|
min_element |
FwdIt min_element(FwdIt first,FwdIt last);
|
q回区间[first,last)上的最值的位置Qpr(elem1,elem2)用于指定比较规则
|
search |
FwdIt1 search(FwdIt1 first1,FwdIt1 last1,FwdIt2 first2,FwdIt2 last2);
|
在[first1Qlast1)中查扑֭区间[first2,last2),如果扑ֈq回在第一个区间中的位|,p|q回last1Q第二种形式pr函数用于讑֮比较函数
|
search_n |
FwdIt search_n(FwdIt first,FwdIt last,Dist n,const T& val);
|
在[first,last)中查找连ln个valQ如果找到返回在区间中的位置Q失败返回lastQ第二种形式pr用于讑֮比较函数
|
input output
\ /
forward
|
bidirectional
|
random access
|
要注意,上面q图表ƈ不是表明它们之间的承关p:而只是描qCq代器的U类和接口。处于图表下层的q代器都是相对于处于图表上层q代器的扩张集。例如:forwardq代器不但拥有input和outputq代器的所有功能,q拥有更多的功能?/p>
各个q代器的功能如下Q?/p>
q代器类?/td> | 说明 |
输入 | 从容器中d元素。输入P代器只能一ơ读入一个元素向前移动,输入q代器只支持一遍算法,同一个输入P代器不能两遍遍历一个序?/td> |
输出 | 向容器中写入元素。输P代器只能一ơ一个元素向前移动。输P代器只支持一遍算法,l一输出q代器不能两ơ遍历一个序?/td> |
正向 | l合输入q代器和输出q代器的功能Qƈ保留在容器中的位|?/td> |
双向 | l合正向q代器和逆向q代器的功能Q支持多遍算?/td> |
随机讉K | l合双向q代器的功能与直接访问容器中M元素的功能,卛_向前向后跌L个元?/td> |
q代器的操作Q?/p>
每种q代器均可进行包括表中前一UP代器可进行的操作?/p>
q代器操?/td> | 说明 |
所有P代器 | |
p++ | 后置自增q代?/td> |
++p | 前置自增q代?/td> |
输入q代?/td> | |
*p | 复引用P代器Q作为右?/td> |
p=p1 | 一个P代器赋给另一个P代器 |
p==p1 | 比较q代器的相等?/td> |
p!=p1 | 比较q代器的不等?/td> |
输出q代?/td> | |
*p | 复引用P代器Q作为左?/td> |
p=p1 | 一个P代器赋给另一个P代器 |
正向q代?/td> | 提供输入输出q代器的所有功?/td> |
双向q代?/td> | |
--p | 前置自减q代?/td> |
p-- | 后置自减q代?/td> |
随机q代?/td> | |
p+=i | P代器递增i?/td> |
p-=i | P代器递减i?/td> |
p+i | 在p位加i位后的P代器 |
p-i | 在p位减i位后的P代器 |
p[i] | q回p位元素偏i位的元素引用 |
p<p1 | 如果q代器p的位|在p1前,q回trueQ否则返回false |
p<=p1 | p的位|在p1的前面或同一位置时返回trueQ否则返回false |
p>p1 | 如果q代器p的位|在p1后,q回trueQ否则返回false |
p>=p1 | p的位|在p1的后面或同一位置时返回trueQ否则返回false |
只有序容器和关联容器支持P代器遍历Q各容器支持的P代器的类别如下:
容器 | 支持的P代器cd |
vector | 随机讉K |
deque | 随机讉K |
list | 双向 |
set | 双向 |
multiset | 双向 |
map | 双向 |
multimap | 双向 |
stack | 不支?/td> |
queue | 不支?/td> |
priority_queue | 不支?/td> |
所有标准库共有函数
默认构造函?/td> | 提供容器默认初始化的构造函数?/td> |
复制构造函?/td> | 容器初始化为现有同cd器副本的构造函?/td> |
析构函数 | 不再需要容器时q行内存整理的析构函?/td> |
empty | 容器中没有元素时q回true,否则q回false |
max_size | q回容器中最大元素个?/td> |
size | q回容器中当前元素个?/td> |
operator= | 一个容器赋l另一个容?/td> |
operator< | 如果W一个容器小于第二个容器Q返回trueQ否则返回falseQ?/td> |
operator<= | 如果W一个容器小于或{于W二个容器,q回trueQ否则返回false |
operator> | 如果W一个容器大于第二个容器Q返回trueQ否则返回false |
operator>= | 如果W一个容器大于或{于W二个容器,q回trueQ否则返回false |
operator== | 如果W一个容器等于第二个容器Q返回trueQ否则返回false |
operator!= | 如果W一个容器不{于W二个容器,q回trueQ否则返回false |
swap | 交换两个容器的元?/td> |
其中operator>,operator>=,operator<,operator<=,operator==,operator!=均不适用于priority_queue
序容器和关联容器共有函?/p>
begin | 该函C个版本返回iterator或const_iteratorQ引用容器第一个元?/td> |
end | 该函C个版本返回iterator或const_iterator,引用容器最后一个元素后面一?/td> |
rbegin | 该函C个版本返回reverse_iterator或const_reverse_iterator,引用容器最后一个元?/td> |
rend | 该函C个版本返回reverse_iterator或const_reverse_iteratorQ引用容器第一个元素前面一?/td> |
erase | 从容器中清除一个或几个元素 |
clear | 清除容器中所有元?/td> |
下表昄了顺序容器和兌容器中常用的typedefQ这些typedef常用于变量、参数和函数q回值的一般性声明?/p>
value_type | 容器中存攑օ素的cd |
reference | 容器中存攑օ素类型的引用 |
const_reference | 容器中存攑օ素类型的帔R引用Q这U引用只能读取容器中的元素和q行const操作 |
pointer | 容器中存攑օ素类型的指针 |
iterator | 指向容器中存攑օ素类型的q代?/td> |
const_iterator | 指向容器中存攑օ素类型的帔Rq代器,只能d容器中的元素 |
reverse_iterator | 指向容器中存攑օ素类型的逆向q代器,q种q代器在容器中逆向q代 |
const_reverse_iterator | 指向容器中存攑օ素类型的逆向q代器,只能d容器中的元素 |
difference_type | 引用相同容器的两个P代器相减l果的类型(list和关联容器没有定义operator-Q?/td> |
size_type | 用于计算容器中项目数和检索顺序容器的cdQ不能对list索) |