PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2023-3-11 11:01:23

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

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

x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数1 ~% x1 l7 r: U; x

, R. n/ s  `  C5 w4 K: W$ a3 @' f

/ _, w! r) U7 U# oinsert()& ^* u8 b9 V: H7 P0 m
2 V; X4 q" T" N( ?: B9 s+ W
. f! E7 A. Z  _9 r
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。$ I! k& O% I! Z8 {* S, ~3 H, V
+ @5 c& X+ Y. O5 w$ t6 L1 k) {

0 x7 P/ E  D8 ^6 Z9 ?& k$ Witerator insert(pos,elem)       
& e5 F/ S( r! @6 b. m+ |在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。& w  V$ h6 ], W/ w- ?. z. S4 `
iterator insert(pos,n,elem)        , V7 I8 t* c" w- u" M; }/ D
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
8 W9 C$ Y$ K7 _( n) Viterator insert(pos,first,last)        
; b) R/ f2 {/ R0 o* N在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
0 ?  k$ i8 j4 W. d2 H8 g9 l8 k/ diterator insert(pos,initlist)       
9 b' ?) I3 W; `% z3 D- v在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
! l( V3 i* {  o: d, J6 m: B# o$ J( }3 c, \# C- [8 u: Z1 i; R

( b- _6 v/ K  H, a  \下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
8 J) z8 @2 I4 J4 Z
% `2 D; J6 m3 T. {

  i( C2 d7 |' a#include <iostream> ! H% i# M) e4 b% ^! B1 |
#include <vector> + `6 B. n, H# e$ p2 S! g% o
#include <array> 6 D, U) @' ?  Q3 {3 p. ~4 r" A
using namespace std;
% p6 W+ x: {, z# g. {int main()
; {+ h: e- V# b/ M# R3 f' P{& e+ W; a& P. A9 X
    std::vector<int> demo{1,2};
+ E- J# h5 Q: a- k" b. W    //第一种格式用法7 ~5 [4 e3 W9 a" z0 d4 U
    demo.insert(demo.begin() + 1, 3);//{1,3,2}
7 z  s9 z& |/ m, a) Y7 r  X    //第二种格式用法
& c5 z3 [. \4 Y- ^7 U" ^$ I1 j: v    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
7 c- F0 f  b$ V6 t1 E% \    //第三种格式用法
- _% i* ]0 v  N" K: c- ?2 l    std::array<int,3>test{ 7,8,9 };' x: j% B$ x, W" V$ a
    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}  W! X0 h. M5 q/ M8 ^7 A) F# T" N
    //第四种格式用法* ?. e. X, h, Q- p8 d
    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
! H8 S" E. k/ K: ~  C+ i  " e0 c9 U3 K4 r& G. w' O
    return 0;- a: Y' d# i. @; Z! k
}* D( |2 |7 A: w0 S; z
) S1 y# C/ E! E- _) y
* j) k, z+ a& h' ^! G! g+ J
emplace()
* h) b- k1 ]* xemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
9 n: k( V- h$ C! h% F; `6 H0 f0 Y" M& U$ W& x
5 T- M/ c5 X2 x" z) H
该函数的语法格式如下:
3 }' u" \% c3 h4 X7 ]iterator emplace (const_iterator pos, args...);
! K, t' c6 e. d4 b0 `0 ?9 Q) |0 l  ^% E3 |7 ^8 f

4 b3 _2 |9 P: A其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。+ Q( P1 h: C: v
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
/ h, C$ z+ t% ^/ L) s# w#include <vector>7 a5 }$ F' R( R
#include <iostream>
" ~! y# a& R/ b- m: r' z3 X1 Fusing namespace std;
2 f1 f& d% b' d4 T& t8 O. J1 ~* Mint main()   $ S; i* m6 ]2 `
{  x: l& H* G8 B
    std::vector<int> demo1{1,2};; b3 o5 d9 i6 M9 D% S, t
    //emplace() 每次只能插入一个 int 类型元素
3 I2 o% ]. R1 Y( c2 A! f- F    demo1.emplace(demo1.begin(), 3);
" E7 a, g4 f9 Y. g. p    return 0;3 K% q0 ?  l2 T* |( L) d
}
1 f# l; u# G. T! P. i0 h5 \8 `6 p6 I4 B9 h% O4 V
7 Y" `. h! S( \; O+ O
结果 3 1 2
$ M9 X: @8 w8 H
# S' F2 k- n% ~; ]5 E
6 Q2 r7 Z, e% H$ L3 m$ F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了