|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数3 v# Y$ q& l! n4 {) s8 n+ C+ e) p' d ?
, T% a) [& m: m
6 v, q9 n! a6 ?. Oinsert()" n7 {0 P; \! B+ M" y4 o$ T1 O
, w* F+ I8 ~# N [& P
" x& N. e5 a2 ^3 W7 S }
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
1 w0 S# p/ v* L& W7 U2 ?
! ~% S8 R- }- C: o3 C7 z4 }! x% V% ^; H" H* V+ f' o5 Z |
iterator insert(pos,elem)
7 E8 ?2 q( |5 ^. A+ f" b! s. k1 q在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。) v0 v# Z6 X) z) C. h
iterator insert(pos,n,elem) / u/ k% x/ Q$ b7 G3 C- j- p
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。1 t( Y( O v& e2 L( |
iterator insert(pos,first,last)
& j3 g0 j3 o9 Y- D: a8 B在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
6 S( o2 K/ S( E# l8 niterator insert(pos,initlist)
. k* |) p2 w8 D在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。& n" w5 I% V, p1 h" Y/ c; I
6 E" Z5 S* j7 Y$ b2 L7 O
1 e5 o* K' b, A2 |- Y& P1 A7 O% y
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
" t# [5 n; `1 M6 [/ _! y5 g7 D1 l: \7 R2 T$ n' \( _
, U/ b) c' i4 D, }' g
#include <iostream> 9 {* W0 W4 W& H" m
#include <vector>
% L6 C' f4 T5 N# @# I#include <array> . l4 ~1 H: W. A4 A. {
using namespace std;
1 p) l3 B) @1 i T8 p6 cint main(); i7 G* J! T1 b6 H. m
{3 j$ ~7 i! u9 n
std::vector<int> demo{1,2};' f/ d9 e# Z1 s! M
//第一种格式用法" g0 o# X: q! e
demo.insert(demo.begin() + 1, 3);//{1,3,2}
3 k; k: {/ v1 }$ j' P2 L: J //第二种格式用法
$ P1 x) z9 v& U$ H9 s+ {6 j demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}6 f" m7 I9 ~# N# k
//第三种格式用法5 u R3 K! {2 y( `+ f5 V0 h' w. V
std::array<int,3>test{ 7,8,9 };0 ~$ K3 O% p+ l% o
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}! I; y3 h( O. |' \- H& S/ [3 D
//第四种格式用法! H" G. W. E2 H+ p4 P0 ?3 V8 c
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}/ J7 ]4 t6 z! L, N4 @0 A& K, R
/ y! d- M$ R% o2 v- n" S D
return 0;
1 n0 r* R$ o1 J# F- X}
1 V! m+ A- Y! Y2 t# `* \' A2 Z( O8 n
0 K/ S3 y" E, Z- ]) ~4 `) A8 y' E+ |$ U7 K
emplace()) O1 R1 E- U2 @9 U! X# u% g$ F
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。, d( m0 k5 _6 N+ V9 n) Z( f* R+ L
& e; y; l. K9 _; o
& x& R5 {+ G1 W9 ]1 l该函数的语法格式如下:
% C4 I+ ~& @% o: h, i. q$ }iterator emplace (const_iterator pos, args...);
" F$ C5 `; s4 f0 ^- J7 }0 [4 w; a0 O9 v+ ]3 m
- b! H2 y/ P+ K1 L( D) M
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
) F' K# D2 Q; w! M( u简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
) h: s9 q P; d" H#include <vector>
o* C% Y W, l0 `/ z; D#include <iostream>( W. J9 a8 I, {: C
using namespace std;
- L1 Y3 L$ I+ A4 @- q9 ]int main()
: K* C7 o5 Z4 v{
" d }0 a! d* t2 v' G d std::vector<int> demo1{1,2};
# k9 [) I' p* Q' q" o) z: g //emplace() 每次只能插入一个 int 类型元素
2 ^ D" ?- G) Q demo1.emplace(demo1.begin(), 3);- y- l8 S2 i$ Z& w
return 0;
0 ~2 y0 G* }' y) |% x3 g2 v% U}& Z+ I3 @# U, @9 c% T% W5 H" Z' s
; e6 w0 H3 R0 y
# R: i# @ O7 J; s2 S2 x5 J7 A% A结果 3 1 2 5 K0 J) S6 W8 Y2 \
& V( c4 I8 R5 m. Q' M$ _2 s
( m7 \: D" @/ v. y+ ^1 M* u4 @
|
|