|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
vector容器提供了 insert() 和 emplace() 这 2 个成员函数+ u7 R/ |: L" i$ J5 S8 m% ]
9 s# S* t7 M: @ \! ^9 \! ~: r
. H) X7 \% @: x/ q7 V' G9 f7 linsert()
6 k! W6 m, z8 b7 ^' |' t8 ?, `+ @+ e) `& Q
; o2 v. N' C$ w4 U3 H: w+ T
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
) w! g; S, J4 L8 b) E2 f
: x1 J, ?& k+ E8 f
; M0 c5 k5 p3 ~iterator insert(pos,elem)
% R) ~/ N5 @! _* o+ s5 n在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。5 }/ ]) K0 w$ T/ }) c5 j9 ^
iterator insert(pos,n,elem)
- d- P9 S" A- C; w, Y4 Z1 f5 ~4 F在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
% `# J# U* [7 \8 Z; L: Uiterator insert(pos,first,last)
" F7 ?9 {+ W4 o2 z/ H在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
1 d" R; P% u- u5 x( Y& qiterator insert(pos,initlist) : M. ?3 U. W9 _4 M" p
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。( x- u; b& T; j+ ~0 d' ~0 |! ]6 u
9 p/ p+ z$ G1 G3 R% K; a/ Q; X( @/ I' W! ?+ b1 b" E
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
8 Y3 D" }; |6 P3 `: P. l. W+ }1 l
9 H) o0 c8 N$ o2 U3 L, b' N+ H5 p1 Z! I% X8 A J9 W# A j
#include <iostream>
- r4 c4 u; P$ a#include <vector>
: \5 d3 v1 O0 s2 L$ w#include <array>
3 d F+ @+ a6 |* U0 dusing namespace std;
6 j! v5 M, s+ `8 ^& C/ Pint main()
# K/ B2 D7 _1 n% ~. H{6 T7 ` P8 G) f" w
std::vector<int> demo{1,2};# k2 [5 k: R8 ^/ s+ Y8 p
//第一种格式用法3 T8 p7 [! A8 S* I- ]. a
demo.insert(demo.begin() + 1, 3);//{1,3,2}
; c9 y& J: {' b0 c' x //第二种格式用法7 M: X2 t& s- z' E: R% z6 Y
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}9 _) O3 T4 k6 S
//第三种格式用法
/ U4 Y0 c5 E* w* c% B& ` std::array<int,3>test{ 7,8,9 };
$ b7 G; J3 @2 @. S3 ^8 O' S$ b3 K demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
, m+ V. n* ~: g4 e3 y S7 ]/ f; f //第四种格式用法
' V2 ]1 @, k! R& ~5 T/ l. H demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}+ i2 P, D7 z5 h$ l# L
# z4 c( T2 @1 O" [: y- v, h/ G+ H
return 0;
; m7 r; i2 |! g# t! L: }" m6 Y}1 I6 u+ \ \" Y6 L4 x9 U
, `' \ L; j( A( m) W/ n: w( w
. h% ]+ N4 r2 E0 l& W. a
emplace()
: H( Z \, K7 V0 _# j+ t. `8 Memplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
* ^$ b# d/ `) x; K
$ R' ?, y1 r+ I: x6 N+ N7 D: b9 z8 C7 k' ]8 j' e$ s6 \2 x m4 v
该函数的语法格式如下:, S- L, z t9 \1 x* v, v6 w( ~
iterator emplace (const_iterator pos, args...);
* x3 A$ N0 `1 W1 l' E3 W# w& \% u& _" \
8 \8 N6 L! s6 p2 u
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
C; d5 K) D0 v$ c6 S简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
$ m5 N6 V1 d% m) x#include <vector>
. O% }8 p8 t+ ^ K' b O#include <iostream>
$ e; \3 @8 T+ Z1 t3 }$ Busing namespace std;. |. L4 i& K/ h4 c
int main() % o6 x+ d! I5 \0 I. n
{& B. B# f! V( \8 ~/ ~
std::vector<int> demo1{1,2};
) N! e+ L) B4 U; Y( \ //emplace() 每次只能插入一个 int 类型元素
2 l& k# k% c) N$ v demo1.emplace(demo1.begin(), 3);
8 |( @2 D) s& |# ? return 0;
( B0 T8 Z& D7 ^+ K# e+ F2 ]}5 u3 w* q5 X( x. H: r
$ N: t4 k! \! H% J) U' [5 {
# J5 n# n9 j, L结果 3 1 2 8 m3 a P7 d# [# G
) q. z+ h- ]$ L/ Z! p! e+ p
& ?) R/ U, W$ F/ ~. y" j8 k
|
|