|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数" X6 T9 C, i! v$ q
; A7 ?! a+ ~- W: b; b
+ j1 J+ a! f% Z+ c6 ~8 A3 zinsert()# n3 |. \ m5 i2 t3 W! s( ]0 A" V
" O6 ]1 b+ v, T9 Z0 M$ R7 `2 Y% u, m& I
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。, R# g0 }( G0 B7 g
5 e7 ^4 b! [! p0 ]* L0 R/ |
( c0 X/ O9 M% k0 ~ Siterator insert(pos,elem) . x$ _6 ]' ^0 X& i2 k
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
" D+ u3 o- n9 Diterator insert(pos,n,elem)
! q. f( o/ |- t5 t% H+ ^; F5 |在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
# A9 }0 f0 }( d# j6 E3 iiterator insert(pos,first,last)
& u! y/ N, p2 D; \在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
0 C/ M6 [, E9 w: iiterator insert(pos,initlist) + E: n. C0 B5 H I
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
. Y9 a! T; k. \# ]" L
/ l/ B& e k+ w% s( Q
* C! n. D- C- A1 P下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
( r# Q3 }; C4 p: a9 ~! j# r1 J* _4 J% ~0 r! o8 ?% S
" `/ T; C# C, F( K
#include <iostream>
/ z& }) `5 v) S! R- _$ `3 i#include <vector> - G6 c/ c l2 K8 Y0 H+ I
#include <array> 5 ]& W1 v' s+ h1 F0 k
using namespace std;
0 H- p8 w3 K+ Wint main()
) |' M! w+ C( @& P: h- D; L3 m. {, i{
T: [% ~4 Y1 }: c W2 J0 w std::vector<int> demo{1,2}; s: c0 a3 N* v1 J/ X! U7 m
//第一种格式用法
) B6 j8 ?6 @ F4 r j8 K demo.insert(demo.begin() + 1, 3);//{1,3,2}
* d! j8 Z3 a" [7 u' @1 f2 ?6 K //第二种格式用法
Y( B3 H4 x4 R6 J3 r7 J demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}' a' l a) i* K4 i! S0 _* Z; u
//第三种格式用法! a7 `3 D3 G. s! S
std::array<int,3>test{ 7,8,9 };
& S8 q1 F! |: a- x6 R6 h demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
# Y* \; n1 s- q, n# g# r //第四种格式用法: l0 S9 r: m( g( r& V
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
4 g# T* O, F0 E
$ O4 l, ^& @) s# _ return 0; ~+ S, |" \# r p
}
7 M& _( _, D2 @) _: U: ?; ~, _! e* _5 K
' Y4 t1 z3 W9 x8 H
emplace()) F' V/ ^% o% z, }- |
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。' [8 S# B* ?+ s
0 z+ ^% \# o# W+ |2 V: H# a, c$ N4 P9 ?* i9 @# Y
该函数的语法格式如下:3 K+ N; L; i0 Y( z3 W/ {
iterator emplace (const_iterator pos, args...);' L5 n- S2 p2 a: Q+ G: ^
W0 M7 k" v6 j
$ ?# Z8 Z( G: K' [& }其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
1 W/ p; m! B- n; |简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
, E- n7 K& F! z$ E& l+ b% u# w#include <vector>
2 G6 j) L- `- [#include <iostream>
6 i* _5 D" G+ pusing namespace std;# ~5 h+ F# F+ m7 C& C0 N
int main()
8 P, v! L1 X4 ^* N{# \5 @. [1 v7 B
std::vector<int> demo1{1,2};
# S/ E3 ?. K3 q7 p2 T: O: f //emplace() 每次只能插入一个 int 类型元素& I9 S# I, \) h' \& a
demo1.emplace(demo1.begin(), 3);! O( O/ X4 _( \% a; t9 f7 C0 f' F
return 0;$ E1 i( s0 L1 p" O' h( h
}
- O; c; G; Z$ O7 l* \, f/ U; j0 J( A3 j0 i6 D5 z- t
0 d' G; j' h/ L8 C1 G3 J结果 3 1 2 $ f" ~/ _& O& {( f/ x" k" s/ E
: L. R7 z! o S. p
- ^- d* @- M0 U" c6 c |
|