|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
1 |0 c2 E+ N, j) b
, s7 m) D2 Z8 x2 X
! V6 B+ j* X* x k0 I3 |insert()
( r5 }+ C+ R* B$ |4 K
% |! D' e" C- l2 X' o( _
6 Z- C# {. F* p1 f9 E3 [insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
. ~: t: c+ y+ \, e' ]& w# `0 F0 t+ U- x! j
& b$ C7 B0 j, w0 y* p% ]
iterator insert(pos,elem) + e! J8 e& \. @2 P5 a2 N
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
/ L: Y, ^: T8 `5 N- ~/ T! `iterator insert(pos,n,elem)
0 B3 I, s* |' M6 z/ F0 F, x* S在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。5 i$ M2 {/ h5 S; p
iterator insert(pos,first,last)
$ c! R; z( b& |' A- M8 {$ Q在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
3 u1 p. i0 A/ g2 Fiterator insert(pos,initlist) Y- n6 W8 f/ h; u9 p V! V
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
( L% M, T1 w1 D" Q w; h4 C8 L8 j7 H. z: ^+ Q' M5 H0 r8 B! y
: z; P3 D3 }$ e
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
4 _5 i; C; }; [- z, a+ h
7 `) Y3 w2 O2 q7 h& W) T8 k
: q, N* h* I& ~! w* o, Q: R#include <iostream>
- T( L4 t* t& _. D* A8 w#include <vector>
: _7 \$ F: i v#include <array>
. j' P! Y% D) q5 Y, M8 W4 jusing namespace std;
1 Y' { r# K# N" g6 B) Iint main()( ^# c3 w( @9 n1 J3 k' Q
{
0 G4 y) `( T( K/ \) D std::vector<int> demo{1,2};! q/ R/ p) N2 S' c3 K
//第一种格式用法- X E7 d, @, [* k/ b8 ]) t e$ b5 s
demo.insert(demo.begin() + 1, 3);//{1,3,2}& q! K& D& H% e, j/ _2 d9 \
//第二种格式用法
; }9 }+ Z( z1 i5 H T( h+ i demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}" W' [0 ?, g. ]5 r
//第三种格式用法! K* n2 \1 }7 G3 X% d4 r
std::array<int,3>test{ 7,8,9 };
9 s( F2 X* O/ [+ W8 y! l; l( ^ demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}, O7 [9 t- T O' N2 {2 E* s: p
//第四种格式用法
6 B& L( w+ x; |3 h" l2 z demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
' D2 x1 _* S' T; Z2 ~ u d
% w/ J6 C4 E$ R5 X0 x return 0;( H& k% [( u; z
}
* e& s/ N6 a7 t5 Z0 n6 E/ D O9 o6 k8 g7 `
* }" W3 R$ J, g" e
emplace()" I) `8 d t# _" P
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。2 R8 y' ~ q" O. @" X6 l
: `& x6 l1 v I. I; }+ Q$ T& H" |
; s! h# K1 @! G' X/ [2 q* @, o
该函数的语法格式如下:5 I- W# i3 |3 S8 f8 U
iterator emplace (const_iterator pos, args...);
, r) f# O; g# K
; [( w' r& v3 H& O0 @7 {3 p8 [3 N' W/ _# x- q/ a
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。! r$ P2 W2 T0 Z. A4 b
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
& R( K" r0 l+ ]#include <vector>
6 U n( W( F# V6 q) M& L; R#include <iostream>+ ~/ U# j0 E8 ]0 L! h9 e% {: Y3 W
using namespace std;
+ l; x9 ^( Z7 L) vint main()
, v, t* P: z) ^. r3 M# j, z1 k{% D* a! Z# R. N: \* m: Q
std::vector<int> demo1{1,2};8 p& S* q# M0 t9 L4 R% b4 H
//emplace() 每次只能插入一个 int 类型元素
+ w9 d! l; T0 {! |: p6 r3 l demo1.emplace(demo1.begin(), 3);& z6 l% x. t# }/ h: G" Z2 @% ]- u' U
return 0;: W! F( E+ U2 O: [5 [
}
- ]8 Y- Z7 M5 q- z2 H) D6 K- \% k
. n. O/ `' r! t- O7 `6 G# O) G9 o) d- k: @6 l
结果 3 1 2 + F( _0 f8 J6 \8 b! ~
7 @ _7 B# u- G( ^( W
& N6 V4 c, p5 m/ n" {5 e
|
|