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

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

[复制链接]

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

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

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

x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
- B6 m, T. M5 J9 \
9 ~  j3 B8 ~7 a( Q! X7 o

2 w  V* M$ U( e& a6 q) V% Einsert()! @( i( K4 f5 {: y. D
, u. b& X! V3 @9 V2 `. \" ^$ y/ D

5 R! m+ ^/ }+ m% v0 e1 W+ \; minsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
! M7 w- I+ H7 b& u% T5 o8 ]4 P. o, C( {. y" m& w$ m5 o( R
/ l1 E$ ^6 X. @: i1 o
iterator insert(pos,elem)        # }# `* [, T% |, ]# S! ?8 P* @
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。4 e4 [  E; P7 @/ V& S
iterator insert(pos,n,elem)       
+ z7 m2 C( v% p$ _9 R在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
2 x) X" @6 }  o) giterator insert(pos,first,last)        
9 M3 {% m5 g" p2 I' u; s+ Q5 T在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。/ A7 E2 x) `$ s( Z, p. S' k9 D
iterator insert(pos,initlist)        % o; o; p1 d$ L" }
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
1 K3 s% J8 D( M1 f' f
3 d+ s% g5 k6 q1 A+ y) k: D

" C! ]% j8 \7 K" ]: ]) ]8 G下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
2 v& F, S) \5 W1 ^. A" y: E# n7 U1 Q1 O- b2 {

* M* B8 g1 Q, W" I#include <iostream>
2 F; p0 Z$ ]) G0 A, Q3 H: s#include <vector> : x% Y8 D/ h. ~. [' B8 s
#include <array> - l4 T) ?, r, H2 [4 N5 L
using namespace std;
, a) Q  x7 i2 v4 n8 g6 \+ m" m$ rint main()# l! G4 s. L4 }3 B6 C- P4 l1 ^/ `
{
% i7 |3 H7 H- I    std::vector<int> demo{1,2};
" R# k! {" K) d5 L$ M0 K2 P    //第一种格式用法
- H# @3 M4 m" L, P    demo.insert(demo.begin() + 1, 3);//{1,3,2}9 }6 Q1 b6 O' ?! \8 N6 T
    //第二种格式用法
& ]+ f" `. S" u) l! N    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}% S* y( r0 E0 N2 B3 q; j$ r, l
    //第三种格式用法1 ^% B! E; {* ]- Z3 ~* S8 ?
    std::array<int,3>test{ 7,8,9 };
- X( |* g  @; K* H4 X    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}0 Q4 u, h5 w! H  L5 F5 I" ?
    //第四种格式用法/ Y% n* q6 U+ ]
    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}5 I( i+ V5 Z3 A& g# L
  
3 `* P9 p  q8 b; y/ S    return 0;
7 ^  T  m, n4 K}
, o4 u: Q+ h% m2 ~2 J/ S+ x0 v6 ]* P4 K9 b5 U7 f
* q. e( |5 w9 \% ^- ~) ~
emplace(). }8 P( }# N0 h. z
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。: M! O8 ?. z; B2 ]4 V" k2 v% K0 A

+ e. _" p: X( j. x- M+ k" N; L
, c6 K! a1 D# [. ~/ D+ z9 `
该函数的语法格式如下:$ s( l) S9 G/ d
iterator emplace (const_iterator pos, args...);
- N0 Y" ?8 ]/ }2 u1 b: x1 O7 J  `7 A, r
  r8 C$ N$ w6 G- k0 c2 |
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。9 R& ^$ d8 P5 b! Z% ^
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
7 h# p8 ~0 c& q) I* k+ T#include <vector>
' ?3 @- K5 j% i, L4 i) v% e' U#include <iostream>
% X/ @: z% k+ C0 O+ k5 b7 B( v' [# Husing namespace std;
9 T8 }" M/ n9 Hint main()   & L/ R5 H3 d7 ]; V7 \0 `) a5 |- X
{
* L* ~' t* q( j; _; j: V    std::vector<int> demo1{1,2};& P/ {5 {' o' @) ^* V% Z! X
    //emplace() 每次只能插入一个 int 类型元素: Q( f2 u: f( b/ C1 L
    demo1.emplace(demo1.begin(), 3);( m, z, |1 S& }8 Z
    return 0;: f- t# l4 m$ @! Z& W9 o, R
}: k7 }4 d! _* S0 f( L

5 v4 ^/ @" U: B9 K) Q$ R! u4 F2 }
9 C( ?* T  j7 @2 j! `7 p/ K; S
结果 3 1 2 & J4 H, \& O0 I1 F$ w5 U3 z5 X

( q+ J0 n/ \6 p' [; D
! o& `- f2 g( j& p
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了