|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数5 S7 H4 `7 h; q& X& S; m9 g5 A
5 v1 ~/ I5 Q) J& r/ [5 Q. Y2 R" ~- Z
insert(). B# b( n! i$ t% Z( l$ C
6 I2 P' Y4 g+ ^0 a
+ x$ ?5 ~3 R3 l( n$ `insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。* \. h1 V2 d' N/ ~8 x
4 p4 W% U2 _" f7 k" h
' E T9 h% `) S8 `+ j' Qiterator insert(pos,elem) 4 j( F% l9 D! l
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。( E8 x* w8 Z( ^& j; c3 X
iterator insert(pos,n,elem)
, b) m. u" ~! x* l; c+ y/ j在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。; w2 `& p4 d) z6 u+ A- _
iterator insert(pos,first,last) " C; |' ^9 t2 M, P
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。! t$ z" f& _ f" u5 v1 f# G4 _
iterator insert(pos,initlist)
% q# N) I0 z, w$ _- q/ E在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。, n4 j# x, _0 T/ I0 i
: S4 Y& z3 A- A- Z# l0 C% ^8 d
" M3 x* B r+ D6 b; E
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。+ V6 ^/ d' ^8 \& K& u& a* @
, {& I' Y3 T! A) L4 d- P7 `$ a
. M8 x. I; C- A- g6 P
#include <iostream>
* G; h5 {& U8 o#include <vector> ! {4 z: p F6 r+ \1 }1 Q& @& ?* \
#include <array>
) R. d# t3 d/ A; H7 J" Q: \; h6 Jusing namespace std;2 ~+ U/ m9 g3 K5 [/ {( H( R% \
int main()
* k& a" N- V- ?3 j I6 w{- F9 F4 M) j1 K0 V& i" K1 [: x" {
std::vector<int> demo{1,2};4 m# H, N, c: ]
//第一种格式用法
( `+ N' _8 [/ |5 Q demo.insert(demo.begin() + 1, 3);//{1,3,2}& Q4 {& i& P& |1 |
//第二种格式用法+ W% {& j9 _6 S" }
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}( K _& i0 D2 r! @" G( J# b5 {; K1 a
//第三种格式用法* h4 r" A2 E$ V3 ^9 o4 c! l
std::array<int,3>test{ 7,8,9 };2 {/ Z, \5 a* v; G) f1 ?" e# P
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}# U/ |6 Y& K% ?9 Q) J6 @$ T- m
//第四种格式用法( b3 z' W! _# e- X# ?. _
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
! Y, s! x8 o" H/ o e / o2 M$ K5 ]' q% e* h; s
return 0;/ C' @' {: J% A$ H- L* U" u
}# c! L$ X( l g6 j2 @4 F
, Q9 O: m5 f5 `* }% e
* D t# D# T* @6 t c$ u5 w
emplace()
) n1 a# y0 I$ N8 u# X9 jemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
( _$ }4 C3 h2 b; f) ^
* \: x; H; h; H' ~
1 H- a3 ^3 t* t, Y( C该函数的语法格式如下:: k7 P' V4 m; Y' X9 L
iterator emplace (const_iterator pos, args...);' J, `8 p( Z+ O) z( ]
$ \0 M0 ^( B" c8 m2 V# H2 n
% \# H% x6 H! {1 f5 [, b8 M6 m% c其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
( Z3 P4 j" ?4 I, U0 b! ]+ a简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。% C! M2 t, k0 ~# H: U( i- ~
#include <vector>9 u! k5 ?9 \; q/ c
#include <iostream>$ X: x* h0 E+ O! ?* m$ g
using namespace std;: v1 C( c, ~4 W' F/ W
int main() 8 ?+ F6 Y- e) b W0 @0 a4 p
{2 d9 k# y2 c; }1 S" U- |
std::vector<int> demo1{1,2};( x, L$ e& [9 d. p' H3 U
//emplace() 每次只能插入一个 int 类型元素
; [$ n# _. g. x. P- }: } demo1.emplace(demo1.begin(), 3);
+ M; a' S6 o, @4 K+ Z7 B: V return 0;
/ _* x( Q- f6 N: [/ C# O} J0 U' Y7 Z2 w o; d
: q8 j3 F+ `! x! y! @" f- U
z9 ^, x1 U2 _0 `- R结果 3 1 2
4 ]7 v" Z7 ?' w* v/ U
1 A9 z. N9 T6 X$ I6 \! Q! N' Y9 Y/ {% I5 ~
|
|