PLM之家PLMHome-工业软件践行者

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

[复制链接]

2023-3-11 11:01:23 766 0

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数9 ]8 {  ]9 r9 U/ Y# L
( o" v. K$ Q2 T4 l8 q  N* x6 L. n

% ?& B( Z$ |4 w9 yinsert()
% x+ C  [. A# L
3 \  j- D$ B" C+ f1 c

: l' V3 n( }  Z( S% cinsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
( m4 D" f, O6 p; f9 Y* z% }
$ E' }2 G: b3 Y4 A% {6 P/ N# d
$ J1 ^& d" u' O/ L2 O& k7 H( X
iterator insert(pos,elem)        ' @0 p9 {; u/ m! Q, i" _' t
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
# U' _# K2 \! j, G$ _' _( qiterator insert(pos,n,elem)        . j" ]) r$ I; b% w; I1 A
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。* J+ t. Q8 P( ]! d6 @9 u  w
iterator insert(pos,first,last)        
+ {) l# ?- J+ k' [5 N$ p; m3 ?* @/ ?在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
$ h8 ^% ]0 R* W7 @  y. K( U. [iterator insert(pos,initlist)       
3 c0 Q' O& k+ T# d% q1 L4 T  A在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
, e$ u! v5 q+ G0 T. p- Y" b( `- r# `3 `$ v9 c
' s: q* O" G* h0 Z# Z$ r1 @  q9 g
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
* d1 }, d4 q, H1 Z( C/ l; _# W: y" }4 u7 f5 w* h3 z
$ j! p% B$ o! L# p" [, j6 |
#include <iostream> : {" b1 V! N- M- w( B
#include <vector>
* {" {' U8 l  s: a- |4 M; l#include <array>
+ u  o: X9 c* Q, i+ u4 Y. gusing namespace std;5 l6 W. x* }3 C( x
int main()  ^0 T) A4 H) s7 a* i% |* e+ _
{# G5 b) l" W% `
    std::vector<int> demo{1,2};6 W, H. p2 I5 R& P( ^  ?$ S. N& I
    //第一种格式用法
2 P7 m8 h5 T4 K- H0 i    demo.insert(demo.begin() + 1, 3);//{1,3,2}, G( a2 O6 l8 L. c) E9 e" u" N
    //第二种格式用法
, k7 a% X/ \: R1 d# V" e    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
" c6 R9 [+ \1 A9 R; t' x    //第三种格式用法
: h/ u4 a/ _- y) z+ i/ e    std::array<int,3>test{ 7,8,9 };
* J5 [; y9 s% z  |    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
  K2 d$ S& e* m) m/ x% m    //第四种格式用法8 ?; b" a% p+ H3 j( B
    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
2 ~0 L; s: h6 m% D' t" L4 r5 R  
7 _0 i( A( ~. g4 L    return 0;4 e% T3 }# K$ ~7 r! P/ c" V
}- v* e  R/ s! c. r
7 O) b3 Q- X/ h* V  q+ M% g$ ?
' S2 @" E/ i7 Z8 ]0 ]% Y
emplace()% X# c- A, S! c+ a  V8 |! u
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。) G+ I, O2 J. ]  \% n* C8 E
- K; l% K: u8 C

6 I( h3 U; M& Z1 z该函数的语法格式如下:- f4 S& S3 j+ u1 J& I( V0 P+ D2 v
iterator emplace (const_iterator pos, args...);
* N- t$ N4 W# w. @: Q+ v
* g) ^4 v7 r2 K/ e
7 C7 w. b0 B! v! N
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。; y$ c1 _" z* B$ y  l
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。7 J# E: u& Y9 Z+ U# \( n5 N
#include <vector>* M  s9 B- V" f# O7 J& G5 |
#include <iostream>
6 k: S1 S$ L: L7 I% v& h. g& \8 @using namespace std;8 V5 [5 }+ }% M
int main()   8 r; ^2 u% k) i
{$ w6 y" n1 g: O. C" B
    std::vector<int> demo1{1,2};
! M% H* i  `/ p    //emplace() 每次只能插入一个 int 类型元素* E- C! Y9 }3 v0 X/ ]
    demo1.emplace(demo1.begin(), 3);
, y8 _4 E. _( Q5 X    return 0;; Z  N8 i& x* a0 S; _! a
}
5 g" }8 ?9 U& A9 |. t6 D. j" f
) O- v: [, J4 S$ ]) \: u7 S7 a

: W! l. J2 h  O- y% L2 H& ?结果 3 1 2
8 a5 ?0 y& m7 L( p6 v+ Q7 s1 n, c1 o# s( \- E. p& l; s+ n
: A) _; W) l6 P( j
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了