|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
# Y* ]3 ~7 k _ \# t. {
$ s2 _3 `$ z8 R$ U. o2 v' `7 B/ R0 w: D1 T: o& O
insert()
6 ]5 E3 N8 l- d( I/ O+ o- s O; O. _8 g
0 g4 R) ^7 y! k) {3 N5 w. H$ a
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
! n% H8 D4 w2 _0 q" @/ N( x
6 u- j! }1 r' D ?/ u1 p: ^& {7 ?) N/ f5 k" l0 P( W
iterator insert(pos,elem)
" h9 q2 }/ O$ y8 u2 Y在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。, E) g1 T3 |5 r$ R% h
iterator insert(pos,n,elem) ; B, B# i1 I' F( {4 t' L! p
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
; R6 D. Y* U5 g' k2 D$ i! \iterator insert(pos,first,last)
- }; d @, k4 Y& D8 d6 s在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
$ A4 M6 K* T! R5 Z* A2 r, B! oiterator insert(pos,initlist) " [" o5 D) `+ L% A" D( g
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
, Q' j2 O/ M: q; N3 {/ ]7 x- p: Y7 r3 D* _) m$ ^0 j! G0 u
8 p/ R( D; d4 x9 w下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
2 z* \* m3 o* U: E* o
3 z1 R, s2 v# S w H% c# z! i+ r" v! b2 R9 l5 O* k |! B1 d
#include <iostream>
7 [& Q4 b/ z6 A3 ?4 y( g! x' ~" K#include <vector> $ M3 c# O. K! H, x2 s4 {
#include <array>
( N. G, ~" c- p0 zusing namespace std;
3 ~, p- V9 V$ ~/ fint main()
8 d0 e6 z: n! S4 {5 \7 _# k{
" y& Y6 `+ ^$ ?* G. C std::vector<int> demo{1,2};3 Z1 ~9 D' u. P, |
//第一种格式用法
9 W# U* e: ~; y demo.insert(demo.begin() + 1, 3);//{1,3,2} U( ^) K0 l8 V0 l4 T: n
//第二种格式用法- x5 k) ?0 E$ b/ a+ z8 K2 c
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}1 i- P' ?: H6 j8 R0 \6 O
//第三种格式用法
* H8 F, U" m9 [- `) D" R std::array<int,3>test{ 7,8,9 };! ]4 V* G8 Z# f$ {: j A5 P
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}0 R5 s1 v0 }% A; ?( f
//第四种格式用法
' j& m1 e$ ~" [1 E# }2 ` demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
* z3 j6 `3 q" T$ l0 s 7 A: L/ S% j0 g2 M s
return 0;
) M# D; m& r, Y}' T3 l. n7 E* |3 y5 f+ T& j: }% h+ ]
2 e) u5 v' E' q* n/ g; I6 H$ M0 n
: U. s, F3 _. X) z4 V5 O
emplace()1 e6 W+ d4 ?: [5 X, B' i5 X
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
( f5 K8 ^" J/ J, Q, G; g- H
; f/ i2 k4 z) a
2 [/ s8 g7 S1 v* y% u# }该函数的语法格式如下:
; I2 q7 P. n( u! Literator emplace (const_iterator pos, args...);
& \" ^+ p) E! Y: ~' Z) @! [
- O9 P3 ~3 a4 V/ g% Y
1 n( S5 T7 F6 ?' p* s: w其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
6 O4 O- Q0 u% ?/ q0 ]1 y* B* h) L简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
( I, C( {0 [/ f3 M5 [; h#include <vector>
. T/ h0 B/ D% j8 ~4 J6 L2 f#include <iostream>
; E" b+ f" d7 Y; k$ m. N7 P2 iusing namespace std;
- o1 d$ D) q& K7 h$ aint main() 0 e' l0 `. s6 L D' F& `! R
{
+ y: L+ `4 W) b3 u8 M- o) X std::vector<int> demo1{1,2};4 S+ S1 z3 ~7 {& V
//emplace() 每次只能插入一个 int 类型元素5 \3 q9 q) u, J& c w7 I$ H
demo1.emplace(demo1.begin(), 3);
) h( T0 U6 Y/ V! W return 0;
4 m8 |9 Y0 e4 o! r}' n4 M5 y J5 u% F
! W" W5 z$ k* z# x1 V5 c/ X- H
9 |2 i# m# r! s9 x# h" O1 V2 f3 U结果 3 1 2
* n$ `$ s( C/ S# ?+ h
9 W& V! }! I: ~1 N" N3 Z, g$ Q, n* x- ? r
|
|