PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

admin 发表于 2023-3-11 11:01:23 |阅读模式

admin 楼主

2023-3-11 11:01:23

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

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

x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
" @# M* z1 @' t# ?7 A/ p% i, f; e  |# \  c% V! W7 J

# a- j6 m. Q7 c3 ~1 w1 C+ U& Linsert()' K6 {8 |, B& `( H

  s7 @' a- f1 h  K" F

8 d9 M; ^& u/ t% s, ]9 |insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。8 O/ m$ {, l+ f; W8 {

. x5 N2 P  C9 d" V

) W$ y/ h2 h+ N: M2 k3 G. y" G% miterator insert(pos,elem)        + ?1 G; s$ y  a% ~9 r( T
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。, N- w9 h; o! }) t7 [
iterator insert(pos,n,elem)        1 d' i; y0 Z9 d8 m& T
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
5 N5 K0 p/ A$ C# n) g' Niterator insert(pos,first,last)        
4 o8 Z. V  s. J% ]在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。# [# C- ~6 Y0 C  k' t5 Y
iterator insert(pos,initlist)       
  _" b* R# f: ]' C1 ~在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。$ G* g0 Y8 z# V) t& b: T
- \: Q6 r4 B. w- _

0 |- `3 K- h% _" c3 h0 |下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
8 ?* r' l* T1 e; k, X! [: `' L* i
( f: t  E, F# q* a- A

0 k: J: p/ r0 z! P+ k) c, H, `#include <iostream> : v+ H* w; |1 F; z7 Q0 H( O' `" w
#include <vector>
: y8 C5 f0 @5 w/ n#include <array> 6 n+ e" f" n1 i- Z) C; e/ b* Y
using namespace std;
% Z$ I: K1 c5 D. B9 [7 b& Cint main()9 G* @4 O7 U$ c7 c6 M
{3 l: h4 c/ S' ~6 ?8 K
    std::vector<int> demo{1,2};& d0 H0 W, x. s0 Y3 E' T8 h5 v
    //第一种格式用法
% ?, L" d( v6 B+ J7 d1 r    demo.insert(demo.begin() + 1, 3);//{1,3,2}
6 u8 a2 d, m$ @) Z" K" g( k+ o8 X    //第二种格式用法
' \* t8 P) R' t8 Y8 x    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
- p/ V" Q, Q! I3 z. z    //第三种格式用法
$ W& \6 E  \( x) L# m    std::array<int,3>test{ 7,8,9 };
4 |8 n5 W6 E0 T8 b+ e' [; A0 t    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}$ c% G& S( g+ ]# x
    //第四种格式用法
$ }7 ]6 |! L' i  _: S7 F    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}: n8 ~5 J1 Y# r
  6 B6 U+ f; h+ F, v" d/ y  O: c4 Q
    return 0;: V: c7 V: Z) I5 \
}3 u& l# ^1 c7 G8 t+ S: l. }
/ c, V, C& N$ i7 P+ P

. d7 M( V+ Q) \- W  Xemplace(). X, v, p# \) n: u
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
, W0 h; `! }$ d6 S, |" \1 N
0 r$ [- x9 x+ o
2 N- ^/ T* N; ?, t7 a4 A
该函数的语法格式如下:
, r  _: }% f" u" _) v2 X/ J$ qiterator emplace (const_iterator pos, args...);3 i6 Y1 E" ]- ~+ A0 d

! _/ l6 S0 }3 @  l% j7 U) o

, o% g; }( u& w5 ?其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
2 n3 l7 R0 {; ~- I2 `简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。* g! k7 s2 f) d* {$ ]
#include <vector>
% t' o9 G& D& Z0 A# |  d#include <iostream>
% y! s+ [8 x  f4 i! Y2 E4 K3 G5 Husing namespace std;0 Q! u7 G3 o; T! f
int main()   
1 r4 X% c& A" m2 F4 C( M1 Q) j{7 E+ Z* i/ w3 M9 q' r4 W
    std::vector<int> demo1{1,2};
/ l! q' I! @! ^; i" y& T5 A3 ~! r    //emplace() 每次只能插入一个 int 类型元素' g3 Y% E) e" h
    demo1.emplace(demo1.begin(), 3);
2 b+ y! @4 H  u* D    return 0;
! G9 R' V! `. u- H) x}4 K2 B* e# g4 h5 ^) N

% B& {4 C: T0 E, i+ J' C, |
% m3 ?- o! I  n% x1 V  ?
结果 3 1 2 9 ?2 K0 P% j4 n4 `# d

- i% M! ~# B6 |2 d& s' `$ h& b+ r8 H# N% E
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了