|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
r& Y0 _/ Z4 A! j7 e+ z. g4 n# ^' x5 c ], J8 ^1 N) V) F; i5 R" j
, j6 u! Q1 S' G4 d* t! L0 a
insert()
" a. e( z r* i- k# R% N7 Q9 y
6 T6 _: I' i/ c4 ] P
3 l( r& I/ a( h8 finsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
0 ]$ m8 l/ g( T* G# C9 k5 E' t; Z9 `5 T A7 S+ {6 E
) Q& S7 _: K7 X1 ~0 Q. F7 U, h
iterator insert(pos,elem) * x1 ]$ P. N& e: U
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
# @- h; _, P( Riterator insert(pos,n,elem)
4 d9 L3 R8 [4 f; k" m: `在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。. C' b, {0 m* M: |
iterator insert(pos,first,last) - Q& Q. \& U" X
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。1 |3 x; D$ @+ X, x1 r2 {0 F, b' s: w
iterator insert(pos,initlist) 5 D! @, R0 T% Y
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。' F2 F/ |+ ~/ E
0 x& O/ K# j3 G) |3 K
3 Y Z y) H. |* W$ w/ K
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。$ t z3 e& P, Y, F: B' p
; ^5 N3 ?9 Z+ A: r5 H1 o
' |/ Y- |! l) x0 P#include <iostream>
! L% A' K7 g: b3 c+ W6 a#include <vector> , |2 r1 s' v' `2 P+ R7 _. R- {# O% ^
#include <array> 1 a6 y R# k7 H i) T2 h4 l
using namespace std;9 e% i a* o( b* r$ B& B( _8 H
int main()
% A- B4 S( S+ c+ ~* P{% v* Q8 h6 R. @6 @4 f0 J% h
std::vector<int> demo{1,2};
0 N4 I2 d2 l# N0 t //第一种格式用法& w; Q0 m: Z: z) a
demo.insert(demo.begin() + 1, 3);//{1,3,2}
: D3 a% R6 |' _4 ]( V$ i' Y //第二种格式用法
) K; E+ z* f" ?8 t demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
+ Q: Z& i# i5 X) C( y& Y6 V! k% P1 O //第三种格式用法
0 A5 u! ^ v, k3 ~& T& D( [/ m( p std::array<int,3>test{ 7,8,9 };
( y+ S* K* z. `' Y demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
8 a* W( c+ w+ ]% D$ d" s/ t //第四种格式用法0 P1 u9 T% Z& h! D, ~- t
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
# j9 c; b) V- ?
2 g6 ? O. R0 X" L+ c( E return 0;
1 }9 z2 C0 ]- T% ~. n0 U4 P}
0 F+ g7 A% k/ d, R( I8 a( H
3 ]% x/ P* d+ O6 M6 T4 B6 w0 X/ Q j
emplace()
( c4 ~* [6 W/ ~. C. T' T3 }+ Oemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。- n, I" G2 F6 Z& w
6 A) ]( r. z& c
$ k: D ` |2 |0 O该函数的语法格式如下:
5 j, v* Q4 j, I" a, M. S6 Eiterator emplace (const_iterator pos, args...);
3 u! L9 b! g9 s0 O* }* P/ B( M. Y+ p/ m) p) P- n2 E3 O% P6 j
; }& }/ D U5 A" A- J其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。8 z8 N% l4 P. f- D
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。7 w( J! _ G% f. A7 i: N
#include <vector>
; X- T$ J; {# \" J#include <iostream>
6 q9 C2 l$ I& b5 ^using namespace std;
" f* R, a& i: _' S5 n. J% l0 {6 Xint main()
9 y9 `& F$ A5 L- `{
) n- Z/ L0 p# u9 a { std::vector<int> demo1{1,2};
+ Q K/ N" u) ^' a //emplace() 每次只能插入一个 int 类型元素
/ ~% c: u* }6 C4 I/ c2 w7 X demo1.emplace(demo1.begin(), 3);
$ X; W' t8 l( k: J: z% Y7 G5 z return 0;+ T+ G0 W% o# [0 o) {
}$ W! ?+ b) \% ^. @
0 y" _0 B/ }, G3 p/ I C m9 V! ~ M" \
结果 3 1 2 ' T. m T3 C+ P) {( S6 u2 P
& p+ o/ g% f z! {8 d9 N/ P
% {2 ?0 u+ K: ]$ u |
|