|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数: `4 Q# V% M! q. Z1 q! O: O
9 \( o4 U3 C7 V- G: s3 C) W8 p5 U4 `5 | G7 d! w
insert()
" F+ k! ~( b% D: _! F: {1 @
5 w2 w) H3 J0 Q+ n+ Q, r8 G% r: U6 M
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。) o) F' ^/ V8 f7 s1 X
9 U5 Z9 _5 ^" A z* G2 P6 l8 v
2 @$ U. X$ z7 w3 i# \' M' q9 U, Kiterator insert(pos,elem) 6 N3 V! u0 x/ H/ N2 H5 L1 P; s
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。8 L( O# O" p& H
iterator insert(pos,n,elem) # B& ^1 y, v+ ^# o& t# {: N
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
' Y* f/ j. p8 Z5 C( m# E H! ^iterator insert(pos,first,last)
, Z3 B1 o" e# D8 G7 l* X+ _* t在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。) }: |; h3 T/ V6 V; h4 I
iterator insert(pos,initlist)
- D1 v+ t) g& N在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
0 ?/ p6 B" p* K0 x2 t0 x2 A2 q0 b" ^% n
$ n. v9 Y1 u4 N+ V+ M: j2 N. k下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
" O, d/ j0 h5 O' n% s" A) ^9 [- y! I2 s4 M- T6 S5 R) R6 _
- l" ^# L, i- t+ u: Y#include <iostream>
. q& O5 j9 |' J#include <vector>
' ~9 S6 d+ g! u3 m9 ^( Y#include <array> 6 X$ ?( @: S+ V6 O8 l
using namespace std;
& [9 p1 e& S5 S4 U" Z% pint main()
6 \0 E. {+ j ]/ z3 j' h5 e{
; Z' Z* {% ]1 y3 S d/ ^% A1 c7 y' c std::vector<int> demo{1,2};
+ k9 a+ {9 t1 I% e //第一种格式用法
3 J, A6 d$ i2 z$ @2 J0 j demo.insert(demo.begin() + 1, 3);//{1,3,2}2 Y' d5 L) {, w9 N5 E5 M+ W0 |
//第二种格式用法
, v, X& _8 a! ] V+ S/ ?1 M3 T demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
R: m* \" q2 \# V //第三种格式用法
$ _6 d/ s9 k& t4 G std::array<int,3>test{ 7,8,9 };! B4 _& r' x4 C9 J0 N3 ]
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
: t% E b) T! N2 u //第四种格式用法
* o( Q. ^' O( G0 z7 m$ A/ I: h% t# Q demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
$ k" y5 c2 m, J9 U: |
' r1 C+ b0 g8 l- \/ ?% I# t return 0;
3 y9 ]* y$ d9 Q0 j2 R}& \$ o* E+ ~+ X- Z" s
& ?5 a% ]+ O8 u4 \# z) T
. k$ G8 G" T- C3 D! `9 d, qemplace()4 R$ c' u9 |/ h
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
- V2 R9 l: C+ K6 W4 u9 ?' ~
+ V9 o2 C" G. n, r
8 ~ J; D d& q, e0 E' S D: t4 P该函数的语法格式如下:7 e6 b4 e5 N: |" F1 J9 N/ A
iterator emplace (const_iterator pos, args...);+ E- c6 i! M* m$ M/ S4 G u. I5 N
9 q6 q J* g1 E! l
" h4 ?* b7 B& }& X# U其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。9 @$ E% }# e7 L' G t
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
5 p/ A) r) Z2 ]" X- S/ e$ N* j#include <vector>
* Z( L: h+ [' }#include <iostream>$ T/ i d5 u) H6 N3 }$ I) z
using namespace std;
, {3 Y; T+ I. O: g' V3 @int main()
. `: t" x+ o" _4 s q" T{
* k6 D/ T; p6 k3 } std::vector<int> demo1{1,2};
) p- J- P- O' F! H/ c5 w! t5 w //emplace() 每次只能插入一个 int 类型元素. h- c. h# u; W
demo1.emplace(demo1.begin(), 3);
" K0 E& Z* G) D return 0;; R$ A8 r7 H7 Y9 ?3 W% I9 l' q& v
}/ p2 k C/ i1 T4 b/ i$ C
/ n3 c% `7 P: `) X4 h2 w
# l) P- x* Y( a结果 3 1 2 ) H Z# F t% q) p
: {9 C6 m4 u- {! K
' C: K9 T( d6 {/ E" B
|
|