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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数8 B) U; F6 b5 C* w
2 H8 N, J3 I# x' x

$ p3 [' J3 D/ F+ \- linsert()
) _; G- n# r7 E2 M
, s3 e4 F& \7 S, O
* C0 a8 |" o" \5 D4 @
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。4 u5 g8 y5 J3 |. {# c' {2 o
7 q" ?% m) o% b& i& u- L0 L% D8 ]
- U, N) t0 N3 l  A
iterator insert(pos,elem)        2 M1 ]) F$ g3 }$ q
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。( J( j2 d. f  Y" o$ u, c+ X# \
iterator insert(pos,n,elem)        4 _, p0 V4 M5 M1 a: b
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
1 U2 z. w1 B, J/ T" B5 jiterator insert(pos,first,last)        
0 z6 J2 E2 b3 g; K在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。8 k# c& z5 y  {+ y/ @6 l
iterator insert(pos,initlist)        , C2 m, }: h9 h1 E$ s  {  h
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。/ x1 v) J; i4 @$ T# M+ [

2 T; ^$ V% O; n
7 h: ^9 I! [7 ]2 k8 p1 K
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
3 Y# [" w) J& Z$ o' d7 B& t
( O9 A2 X+ t% {- r! v
( |/ Y- W0 v6 f
#include <iostream>
. W$ z& B& ~! h2 B4 Z( t#include <vector> 9 m1 u/ v: P- ]* q* c
#include <array> # F* H& D. `1 _8 m3 ~
using namespace std;
, G% Q; L; L: ?* k3 e: q0 Gint main()
* W& X8 G1 _9 k5 K{5 I$ G7 c! T3 F2 V
    std::vector<int> demo{1,2};
: f+ f# R- u' D- F    //第一种格式用法
: e' M7 j- X4 ~% b: P- \" d    demo.insert(demo.begin() + 1, 3);//{1,3,2}
8 G6 K# o2 T% a: {    //第二种格式用法
) O" t+ j* e. I0 s4 i( j    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}& ~6 I! y7 d) v- Y
    //第三种格式用法# y) e# H' x, ~: R9 G" _4 H6 w5 L
    std::array<int,3>test{ 7,8,9 };
5 x9 d4 y* X, w9 S    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}; w: Q2 F( _+ F, l
    //第四种格式用法# L  n$ K! x) M; j# w4 A: p
    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}, b; p/ j# K/ f# [8 g# ]3 V! g
  ! y! T' k' D. K6 U5 U- Z
    return 0;
8 H" T: k6 c* V}
( |3 I' P: c2 c; H- n" n/ `  z$ t
2 T' k) s: u8 P  g& O7 N7 R
emplace()
# y. a# ^) k7 _0 Q) ?, jemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。& Q0 k1 M2 H2 \# }1 @

4 A0 |2 M: W# `6 w0 m
, j' M: I7 L! H& @! T: Q- e3 a3 Y
该函数的语法格式如下:
* a% z+ U& F8 b2 }iterator emplace (const_iterator pos, args...);
& X% B0 L0 {7 [# n9 X% ~8 \) m# E/ m1 A! x  \% a
8 A7 e6 z, z4 ]7 F
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。& T/ `6 c8 I$ @8 C, m$ r, O, ?; [- @
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。6 F/ B  l# _6 Z4 n
#include <vector>
* i& Z6 F( z5 J: [2 p0 E! Y#include <iostream>
6 w; n% y1 H9 m" s/ W/ \using namespace std;- K% g! J4 m+ k, s: N3 c- a
int main()   
: y3 [. ^  `- d% z) t6 ^/ ^, Y+ u{
9 h; y2 H* x, |    std::vector<int> demo1{1,2};
0 N( s) M, `; U) |4 a$ P    //emplace() 每次只能插入一个 int 类型元素0 w2 O7 ~+ \9 r  T) s! [
    demo1.emplace(demo1.begin(), 3);
" D8 z1 ^: a( n9 x/ Z5 l    return 0;0 a- r# w: \1 U+ S! _
}
2 |8 v' z) V5 z  j/ Z# E
/ ^2 X+ D8 t! {7 F8 p# c" \& W
& P7 I5 M0 X( F" l
结果 3 1 2 - Q3 o! g# ^8 Y- e6 i0 U' ?

* E+ P1 A' D; k# ^
* m' z/ v% a) Q$ d) A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了