|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数7 w' H8 j- H& `- m; [5 _+ P
2 a+ N: f- e. I$ L3 ^9 Y& v+ }
4 ^( G( H# z# \& Cinsert()* v7 T% U, D# _( w( W; U5 \. r) S! ~
* m: s3 X& p! v* j
; G+ Y6 e' L5 K7 `. u; E' I) _- Vinsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
5 M. a# B! \: m0 x! |' z9 ?- x# X4 ^' `" j9 [6 A4 ~+ F$ U3 Z
# j+ Z2 k+ A+ i- |# w$ Z, Xiterator insert(pos,elem) ) ?5 ?4 u' X$ E* X! t& i! Q8 P
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。0 t% q8 I6 V' v" e$ s8 k4 y
iterator insert(pos,n,elem) - ^# S7 v$ C6 M9 K' M; x T/ Z7 x
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。/ W# R, ]3 d$ a8 h0 b, w8 k
iterator insert(pos,first,last) ) V9 L" k) i; J, c1 Z! W% M
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
3 {* @, t" v5 O+ k" Siterator insert(pos,initlist) N; H, H" F7 w7 j& { t
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
5 p& t9 ^, X$ K8 B7 k* Q) A3 @: S
+ c" h0 g7 f* N \1 ?/ u/ o5 ^/ \0 k
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
4 J6 F- F9 j% B+ n& _: w" x
4 I. l& [2 m, M# x6 z' @( }+ O$ d$ d; j8 i" e/ [; C; m
#include <iostream>
$ x% h8 L$ N- r8 p- _# m#include <vector> 0 a0 {. Q1 k1 |) ~
#include <array> % U5 E$ }# H8 a* w* J+ m
using namespace std;
3 q( t) Q9 N- i1 _/ x/ tint main()
3 Z6 g! N" B5 ~0 \: N3 K& a{/ f) E6 D4 P: G* A5 [& J- D
std::vector<int> demo{1,2};
l3 Y* e5 ~1 n% B/ [ //第一种格式用法
" E' W/ R- d! g5 D+ `7 l demo.insert(demo.begin() + 1, 3);//{1,3,2}( _/ K5 y# K3 L$ u/ L
//第二种格式用法
5 ?; U v3 A1 G4 v demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
2 l2 B+ P& s1 h% B //第三种格式用法8 l T u* O: ^/ @) P& K
std::array<int,3>test{ 7,8,9 };! H2 H# [* H0 h) p" S& e
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}' x$ Z& @7 S: x' [! ?
//第四种格式用法$ E- N; ^' G9 w: i7 k% C
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}- ~; N# L: x( j2 d
- }5 g3 }) S. ]% t( d' R
return 0;
; E- g1 u3 c9 z" ^: H, w) s7 `}
1 U9 g6 J& y" F( ]5 F8 B9 v @% [% H: M' \' F7 |& v
! _! M" _! t0 ]$ h. }% @
emplace()( h0 S1 r3 X V2 i3 S8 H
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
0 Q9 A9 S( N0 X. g9 o
0 j3 u2 n; t ^! ~- u" F
- [; v+ ]' b: a; I0 X( @该函数的语法格式如下:
* }* L" ~' X3 Y! Miterator emplace (const_iterator pos, args...);
9 `/ i- r. O# r) T
+ a2 Z; ~% E2 ?( ~; J& I$ _8 T# I; c1 G8 D
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。/ s# o1 b8 f0 K# A/ n, T6 w
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
2 h- ~* @. ]& p! R" k9 ~#include <vector>
1 P/ O, R, z" [- V#include <iostream>! E, z* W. a+ ]* o, g# @
using namespace std;% b& L5 E A# ^; C& }+ {
int main() $ J- b6 `/ ^! b8 y
{
# {: a, J: v6 w- ~: g% L! Y std::vector<int> demo1{1,2};6 N. d( L. i7 [) R* ~* Z2 }
//emplace() 每次只能插入一个 int 类型元素. Y% i5 _7 O" ]3 I2 k- V5 u9 e( b
demo1.emplace(demo1.begin(), 3);
/ _0 |9 b) \9 k( g7 M J return 0;) d& t+ M: v, D
}
4 W: n6 ?+ J. q0 m; ^; _8 Y: o v9 n! Z9 b7 I# M5 ^
) y3 w% Z, M$ q. f( H8 ~
结果 3 1 2
' j8 N4 A9 @. ^4 D( A! v4 U, t% X3 }
9 w9 ~0 g: m D$ x9 _* N& K5 T& V- D$ _( p
|
|