|
|
请使用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 |
|