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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
! {/ r% ?+ C) c6 R+ {2 M- z- H5 V/ _3 O1 l" i

5 ~' g+ y  L' N0 O7 Einsert()
. k5 |- T3 a' {0 Y1 i3 T" Y: _/ U4 B
" U1 N( R( n: A1 p; R( M$ g
% }" E; M% h& g- D1 I) Z' ?1 I
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
- G3 l& D. P- o7 {  S+ c9 d7 ^5 K
3 X2 o) Z  s. C( V" f$ W0 U
) M$ c, g% x. x5 z( D
iterator insert(pos,elem)        0 l% t$ \0 Z' w* L! H
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。& w5 z, u% X; m9 O: k. y) S, J
iterator insert(pos,n,elem)       
0 v8 f, J2 }# V: V' ^$ X8 C在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。1 Q8 K, S' M6 C+ L3 H0 ?7 a
iterator insert(pos,first,last)         & \4 r  s/ V% M" V! S8 J
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
5 X' t* V1 Q9 viterator insert(pos,initlist)       
' P  j# w9 u/ `在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。- @8 W9 K4 A4 ~+ m) n
+ h) M6 Z: u" K

- H9 X/ G; M$ a, l9 ?0 \1 ^下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
; \; L$ ?4 U; k' L- a8 H& m2 c" j$ q, \* D$ J

& A$ [% J4 q1 M$ O, D#include <iostream> 9 o1 D$ u4 B# h
#include <vector> . O2 t; h) S. V, [& z, U1 m+ x+ {) q/ e9 \
#include <array> * j3 D5 G. ?$ [1 n( [  S9 t
using namespace std;0 ]3 E3 G9 h. V. k. O& M1 n
int main()+ E) {. j% w7 a6 o0 E4 f/ J; ?) Q
{
: c6 [/ J* V* ~) P    std::vector<int> demo{1,2};- m, x) x+ y5 |  q
    //第一种格式用法4 Q( |4 F8 z: v# z
    demo.insert(demo.begin() + 1, 3);//{1,3,2}9 Z* v* c5 w$ P( X" W3 z
    //第二种格式用法
0 E! x2 p' v! U' O  z. W    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
" z! j/ E$ X* j9 k2 j    //第三种格式用法
/ R4 _. L. I- o+ ^3 A& o    std::array<int,3>test{ 7,8,9 };
8 Q1 g; I: K9 g    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}7 x- l/ z1 g" T) ^' z$ b
    //第四种格式用法) ~) o, K: u$ d; v, a# e5 P
    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}1 j6 J" k. k: Z& E7 R) Y: M
  . c/ b+ p1 @/ k, _( \9 W7 a
    return 0;
3 f$ b$ g" _- U}* Z; d; L# w" n. t, v  ?
7 W. n2 b+ t$ j: F3 }3 B0 G8 h
) J- g# M+ ~0 c8 d; M5 \/ R
emplace()
  }9 w0 Y2 t8 w! Zemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。# f& K" N2 A2 l$ K4 C& E& r% j
! f6 Q: z$ t/ B6 M/ k. \& d" X: Q
! _. A$ X6 \0 o( b
该函数的语法格式如下:$ m( f, r% ~/ C
iterator emplace (const_iterator pos, args...);& J4 Z2 D) P4 w) V& d! d( u
4 O) P" W1 D8 X: r, c5 a! B4 @

( {! Z7 M! ~5 \其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。( X* G/ e) T" H  E* ~- _
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。- c6 ]: E; h) n  ^, D& D  R$ J
#include <vector>, Q4 k' b7 k5 c/ @
#include <iostream>( S4 @: i. x4 q  m  [" U6 {1 r
using namespace std;; ~4 k/ Z$ R: y; @8 H
int main()   1 N$ c, g; V2 w$ B4 {
{1 N% v/ W1 j# B# u8 R* j/ V
    std::vector<int> demo1{1,2};; Y- @* P$ Y) U. S) O
    //emplace() 每次只能插入一个 int 类型元素6 c6 B- L- l4 w9 g
    demo1.emplace(demo1.begin(), 3);- ^# A, b: b) r! n- T
    return 0;
% E9 b! s* D$ M* Y2 {, Y}
) s4 r8 l. q! T. F
* \0 _1 I6 ~5 o  [' e7 P$ T

% b& k; x: j$ w结果 3 1 2 , F- l6 A, ^' ?6 r
: u6 E( e( L+ C
, |3 y+ Q# _) J( c* b7 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二次开发专题模块培训报名开始啦

    我知道了