|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数+ t; f! ]) g# g a
- [# x5 {9 [0 e( Z
$ Y' }, i4 t3 x4 Qinsert()
; k9 F+ C5 @& W4 n4 g( U7 ~- n" B
" M* u# o0 ?. q4 U8 j5 P0 v _6 V2 L! o3 N4 D
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
* }& u9 Z4 U W9 g" [) J2 f6 |5 [7 P4 U, I0 ~4 T! h2 w M
^6 ^, L2 R1 p" \) j# c6 p$ w
iterator insert(pos,elem)
. g8 \* t' i a4 ]% {在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
/ H6 \4 E8 Q. }, l9 n% }8 ~; diterator insert(pos,n,elem)
1 M M5 H* f/ Q: ^9 ~5 J* h在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。- g [. t! S1 s8 L
iterator insert(pos,first,last) % H; |1 j& \- e' {( O+ P1 K
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。5 t6 [% `( L9 T# } L
iterator insert(pos,initlist) * Z4 p' d* I: @ S, j; W
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
# g- L- q$ f# k$ {" j) F. b# \1 d. M6 T/ v7 x& j0 F
0 [) `' \) e& v) L下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。6 |- l% J1 o& ^7 V W. ^/ O9 \
' v1 R: G# ?5 q# [7 L) H) u+ ?. h) v- C5 p" E/ }
#include <iostream>
) q6 G& @) Q. [9 i% f' U ]#include <vector>
6 t$ @ p; M' g- X6 v4 o: w' a#include <array> 1 K- {: g4 }8 K' K/ i6 w
using namespace std;
! i& E8 x* E* A2 k' Wint main(); v7 W) P( f6 g& h/ F) k" f
{
5 ^" ]+ ? R+ O1 d h, E std::vector<int> demo{1,2};
; U. y. u5 ]: U+ j; p/ @4 F0 _ //第一种格式用法
: K/ C5 _1 a% G+ _: `4 W R* P+ t demo.insert(demo.begin() + 1, 3);//{1,3,2}
0 x- t1 V! M4 { o. Z. s1 [ //第二种格式用法
# z% `; q! E5 X+ h demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}: w0 F4 R2 u; J" N% Q
//第三种格式用法
! ]1 Z" d7 i" R std::array<int,3>test{ 7,8,9 };
9 H* d: p0 t n demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}3 Z/ Y0 t/ @0 D! q4 a3 k W
//第四种格式用法. q( ^9 W. K9 _
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
8 _$ b) u# n4 x$ h) M4 Z 6 R1 c6 P% n% [7 |0 J1 q
return 0;" Y, B O0 v- p
}( P7 J7 i& U3 @$ q2 S
5 ~' O. S+ p. J7 {: `% u% M3 K. i
, `( r8 d$ a6 d$ ~4 _, T9 templace()" [7 ^3 `! z9 `6 {3 G$ T
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
8 | ^# y" c( M( K( k6 W
; X) N* w% r A, ^
0 P( U$ x4 \' I( G; s/ K; M* S; R" ?该函数的语法格式如下:
; a4 {% M4 S( `! Hiterator emplace (const_iterator pos, args...);
0 s8 p9 {9 C" z6 V z: K- B7 o) P8 u, {- F5 C0 E
& w3 x$ i3 J& O( @$ ~1 ]$ c5 g其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。: X$ @1 o7 C) U8 q, k
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。8 o8 c2 q& `3 F* S; f
#include <vector>% i. ?/ K) p3 q; f
#include <iostream>3 ^! n5 l5 l c' T- u( |
using namespace std;
7 n5 e/ k- N+ z" Z6 C; d3 _) e# X# K" Qint main()
8 b9 ?# [# V! s# d/ t{. b$ _8 z9 L$ F5 d: E- d( M
std::vector<int> demo1{1,2};# |, K( Q! W1 c$ E9 Z
//emplace() 每次只能插入一个 int 类型元素. U, v- }4 @- V4 [6 J- ^& s( ~
demo1.emplace(demo1.begin(), 3);- B9 w* J4 t: }4 O& p6 u
return 0;9 m% v% h9 r1 v
}3 S7 P. }5 u+ X8 `
# e$ v$ X2 d) p% \ j3 p' a3 J
9 B" H4 N y1 f+ e& k
结果 3 1 2
8 Y6 z e; p9 _' T4 I
* f5 C2 H \( O7 \, U3 }% A C4 m u$ n9 } W2 n
|
|