|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
" @# M* z1 @' t# ?7 A/ p% i, f; e |# \ c% V! W7 J
# a- j6 m. Q7 c3 ~1 w1 C+ U& Linsert()' K6 {8 |, B& `( H
s7 @' a- f1 h K" F
8 d9 M; ^& u/ t% s, ]9 |insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。8 O/ m$ {, l+ f; W8 {
. x5 N2 P C9 d" V
) W$ y/ h2 h+ N: M2 k3 G. y" G% miterator insert(pos,elem) + ?1 G; s$ y a% ~9 r( T
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。, N- w9 h; o! }) t7 [
iterator insert(pos,n,elem) 1 d' i; y0 Z9 d8 m& T
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
5 N5 K0 p/ A$ C# n) g' Niterator insert(pos,first,last)
4 o8 Z. V s. J% ]在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。# [# C- ~6 Y0 C k' t5 Y
iterator insert(pos,initlist)
_" b* R# f: ]' C1 ~在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。$ G* g0 Y8 z# V) t& b: T
- \: Q6 r4 B. w- _
0 |- `3 K- h% _" c3 h0 |下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
8 ?* r' l* T1 e; k, X! [: `' L* i
( f: t E, F# q* a- A
0 k: J: p/ r0 z! P+ k) c, H, `#include <iostream> : v+ H* w; |1 F; z7 Q0 H( O' `" w
#include <vector>
: y8 C5 f0 @5 w/ n#include <array> 6 n+ e" f" n1 i- Z) C; e/ b* Y
using namespace std;
% Z$ I: K1 c5 D. B9 [7 b& Cint main()9 G* @4 O7 U$ c7 c6 M
{3 l: h4 c/ S' ~6 ?8 K
std::vector<int> demo{1,2};& d0 H0 W, x. s0 Y3 E' T8 h5 v
//第一种格式用法
% ?, L" d( v6 B+ J7 d1 r demo.insert(demo.begin() + 1, 3);//{1,3,2}
6 u8 a2 d, m$ @) Z" K" g( k+ o8 X //第二种格式用法
' \* t8 P) R' t8 Y8 x demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
- p/ V" Q, Q! I3 z. z //第三种格式用法
$ W& \6 E \( x) L# m std::array<int,3>test{ 7,8,9 };
4 |8 n5 W6 E0 T8 b+ e' [; A0 t demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}$ c% G& S( g+ ]# x
//第四种格式用法
$ }7 ]6 |! L' i _: S7 F demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}: n8 ~5 J1 Y# r
6 B6 U+ f; h+ F, v" d/ y O: c4 Q
return 0;: V: c7 V: Z) I5 \
}3 u& l# ^1 c7 G8 t+ S: l. }
/ c, V, C& N$ i7 P+ P
. d7 M( V+ Q) \- W Xemplace(). X, v, p# \) n: u
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
, W0 h; `! }$ d6 S, |" \1 N
0 r$ [- x9 x+ o2 N- ^/ T* N; ?, t7 a4 A
该函数的语法格式如下:
, r _: }% f" u" _) v2 X/ J$ qiterator emplace (const_iterator pos, args...);3 i6 Y1 E" ]- ~+ A0 d
! _/ l6 S0 }3 @ l% j7 U) o
, o% g; }( u& w5 ?其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
2 n3 l7 R0 {; ~- I2 `简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。* g! k7 s2 f) d* {$ ]
#include <vector>
% t' o9 G& D& Z0 A# | d#include <iostream>
% y! s+ [8 x f4 i! Y2 E4 K3 G5 Husing namespace std;0 Q! u7 G3 o; T! f
int main()
1 r4 X% c& A" m2 F4 C( M1 Q) j{7 E+ Z* i/ w3 M9 q' r4 W
std::vector<int> demo1{1,2};
/ l! q' I! @! ^; i" y& T5 A3 ~! r //emplace() 每次只能插入一个 int 类型元素' g3 Y% E) e" h
demo1.emplace(demo1.begin(), 3);
2 b+ y! @4 H u* D return 0;
! G9 R' V! `. u- H) x}4 K2 B* e# g4 h5 ^) N
% B& {4 C: T0 E, i+ J' C, |% m3 ?- o! I n% x1 V ?
结果 3 1 2 9 ?2 K0 P% j4 n4 `# d
- i% M! ~# B6 |2 d& s' `$ h& b+ r8 H# N% E
|
|