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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
$ C3 b2 T$ l/ N$ J
% Y( ]- x% ]- V- [
9 G6 p8 r5 D  Z
insert()" w2 I4 {+ q& o9 b. ~9 D* C
0 {9 B2 U0 _! j/ V

% K' c% i. G! Y0 G; N1 Iinsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
" H1 z0 n: T, F: [4 \. d/ c, Z: q5 ~- E) v( ~* r: G8 F
- l% D. e/ \8 i( O0 p. P( O' W) y
iterator insert(pos,elem)        1 w% \" N! p9 X! C" h% v9 o
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
6 O; |. C  W/ F  c% c( N$ l9 _iterator insert(pos,n,elem)        . R- S3 F2 J. Z: i
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
  K6 I6 ?$ ~6 \( l  niterator insert(pos,first,last)        
* v, B5 R' _, X* K7 w3 D在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。) o$ Q/ I& K) z. c; o
iterator insert(pos,initlist)        ' F9 i# a, J- ?0 s5 Y
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。. h- |: ~) z+ Z- E1 h  H

/ W! s" m% l2 H

. H) @# A2 C) K! _' E5 j下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。4 l* c# N5 a* \) X
" k. F9 `8 S/ ]+ y

4 f9 W- G! d$ j1 @! C0 j2 L#include <iostream> 7 b5 K" E. `& w1 ^5 k
#include <vector>
4 B/ i  u  h! d% ~/ [7 h8 e) x+ ?#include <array> . O" b  m: R, X0 m& z& m" S
using namespace std;& f1 @( I; t5 Q; G6 c
int main()
8 u  p1 w* s+ L% [* v" Y9 g{
6 Y8 R2 `7 O) z1 y4 f    std::vector<int> demo{1,2};0 H, W; [9 @; o
    //第一种格式用法
0 C  d; h. Q& H    demo.insert(demo.begin() + 1, 3);//{1,3,2}
' R8 O( _4 l& i8 p7 V9 o    //第二种格式用法
+ a7 Q7 m6 f4 Q4 P& @6 g5 v6 ^& O3 U    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}% }) I; u7 _6 J/ k
    //第三种格式用法/ B) }. ^* k4 }- Q# f; j0 N; Q
    std::array<int,3>test{ 7,8,9 };% z9 ]1 I, a2 X1 \2 l0 z$ m
    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
$ V% K; r. i- \& ~    //第四种格式用法
$ H- ]2 }$ n4 x* Y: Z    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}5 t& L" `- ~0 ~- \# W
  
" t% B4 }. h4 S2 p, E6 E    return 0;
& V$ b* H/ e1 r( a* i}- Q" a+ P6 m/ v8 _2 k6 [  O' u5 ~2 f

$ H5 U, ~3 d$ {. F- O+ v3 p
+ Y: u5 r' u/ @! K9 a9 H
emplace()! o) K, e# d- y4 k
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
0 L* w6 [- a" w9 {# D! e9 E/ {, [6 U6 F- e  b

: `2 j0 J( h+ ]% ^该函数的语法格式如下:% t( C( W9 k- x! i& h
iterator emplace (const_iterator pos, args...);
5 h: r2 Y1 m+ E; z. U, ^7 s/ J5 E( Y* [
' m& G6 K6 i" h7 L/ [
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
3 s9 _* B  j8 l3 s1 D% k5 k) q简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
7 K' j# R" A  u3 U; n2 w# L6 e7 p' r#include <vector>7 K' Q1 I! B0 X+ Y
#include <iostream>$ c$ r$ [+ E+ Z* A8 b/ U  ~; ]
using namespace std;8 D  B% p3 z" x8 J& U6 W' E, F9 t) v& i2 j
int main()   ; E9 e; {  H' s5 L) P- S
{8 F/ P0 ~6 F' F/ x. C) k
    std::vector<int> demo1{1,2};
# ^5 _7 J' q/ D8 ]! n    //emplace() 每次只能插入一个 int 类型元素
6 u$ v. W% I2 e+ s    demo1.emplace(demo1.begin(), 3);
; I$ g; m7 W5 C3 D# f) Z3 F    return 0;
7 u/ e) i4 }6 r1 l  r}
8 _4 ^& C7 b& d9 {8 Z
0 \+ H  v7 ]6 j; z) V

% o: R, X1 e! E3 y  [  \结果 3 1 2 2 s6 Y( J0 {: }  q' S
& e, a8 a2 t) ^: ?8 c' e4 \& S

  ]. R: z( o% L7 N+ B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了