|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数" v% ~( g6 M; k S
9 {: d( V i( e9 [( W9 T- j E" I
1 Y U% c& i, ~$ B
insert()
+ j! [' ~! y0 ^9 K
, @! P" Y: R8 @7 u6 ?+ d2 u5 b
$ f/ l4 s2 L% e& n7 Kinsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
- U* O3 g, e4 j" w4 t5 H8 o; a7 x4 z# j" C/ e$ a1 G* k
( C$ j, i- A+ p- _4 m. oiterator insert(pos,elem)
0 ^6 e# u0 I9 i- j C9 c4 c* j7 D在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。 r8 Z( z* g3 \) N' M6 j
iterator insert(pos,n,elem) 3 c% |: w) a( F+ U; l& k
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。$ f+ T7 M6 c2 J8 X2 i- _
iterator insert(pos,first,last) 0 I5 B+ `" p8 I* P; w
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。9 x8 K9 ]6 g% y R1 D& J4 e* I3 K
iterator insert(pos,initlist)
, G) k) w8 V1 w! t8 s在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。3 A" ?7 h" D0 n! B3 t* Z1 e
: _! Q4 P" u3 }
& w! ^# r% F9 c
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
; m( O# W5 x1 a
7 ?% ?6 b/ Y# E+ X/ U+ C
2 \% K& M. y, k5 U9 C9 i#include <iostream> & B/ f# z) Q- K: O. l
#include <vector>
8 Y: t8 c( E+ P0 [6 l9 ]#include <array> , ^( h, M4 d1 _ z( Y- y
using namespace std;. b; Q0 F" z6 A; y' |
int main()
( y9 D$ s3 |" P* G y{; L% s8 b0 w" c+ ^- Y. V: z
std::vector<int> demo{1,2};
5 P, l* P. Q3 J4 h& f7 \$ V //第一种格式用法
4 R R# H6 d: Q7 j4 `* s1 l/ e6 N; e demo.insert(demo.begin() + 1, 3);//{1,3,2}( Z C* n5 K2 f7 J
//第二种格式用法
, J2 Z, A2 F* _& ] demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
- {, j1 {: |* j( l% z //第三种格式用法" g5 c' W) h& `% w8 P( T9 O
std::array<int,3>test{ 7,8,9 };3 P& Y9 ~- ]1 l) O& a
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}8 @7 t- C: [: i: A
//第四种格式用法
6 d# y$ C* h- h3 m f( [ B demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}+ m& \3 @* n- e5 C
# p2 ~: V2 g1 H% w. c
return 0;/ m p) ?4 ~8 `& [" b3 a8 v
}
Z9 d. Z7 I, b; s2 f3 E4 Y9 R# r4 w3 M o) Q$ W
8 u& {2 r/ i$ J$ Y9 J4 X1 t5 w4 O
emplace()
! g. J* ?9 E* c8 X4 F$ D2 templace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
5 T! T9 C6 `9 A. Y/ _. u& S' F! Y) j, U' q- t- @
k5 \- w, t. a+ C/ l
该函数的语法格式如下:3 w$ g, N+ T% N) w1 X
iterator emplace (const_iterator pos, args...);
8 r$ l: o' a/ R4 m
- I/ w/ K- }8 T- R- ]0 X8 G7 j# t& K) T
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
8 W# E" P3 {2 y, }5 j7 {简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。' x3 s, v6 v, A. }5 N+ e8 Z) x
#include <vector>) {) s% C" @6 O" {5 J3 U
#include <iostream>- R' o- g5 H( t( v5 ]! K
using namespace std;% g7 l. h8 J5 t( E2 B8 N# P! f
int main() % U+ Y$ V! O5 U
{
4 A m6 ?& S" V std::vector<int> demo1{1,2};" D6 E: G8 ^) `$ h* @
//emplace() 每次只能插入一个 int 类型元素
$ ?6 k+ R! l8 U# T- g3 P demo1.emplace(demo1.begin(), 3);- E# j" j) G( t$ V
return 0;
/ ]6 z0 q0 Y! F1 o0 V7 E}
$ t. k8 r4 n" q. r6 p" H) ^4 O; _2 b ]: O7 \8 i
$ a! N1 ~" P1 E) c
结果 3 1 2 : [) k! h x8 N5 Q' f
. ?# |/ |9 D; J# E1 y/ b
9 T& _' U8 V4 Q& g7 }$ e
|
|