查看: 948|回复: 0

[资料] vector容器提供了 insert() 和 emplace() 进行元素的插入用法

[复制链接]

4

主题

4

回帖

52

积分

管理员

积分
52
发表于 2023-3-11 11:01:23 | 显示全部楼层 |阅读模式

请使用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
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部