|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
! {/ r% ?+ C) c6 R+ {2 M- z- H5 V/ _3 O1 l" i
5 ~' g+ y L' N0 O7 Einsert()
. k5 |- T3 a' {0 Y1 i3 T" Y: _/ U4 B
" U1 N( R( n: A1 p; R( M$ g% }" E; M% h& g- D1 I) Z' ?1 I
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
- G3 l& D. P- o7 { S+ c9 d7 ^5 K
3 X2 o) Z s. C( V" f$ W0 U) M$ c, g% x. x5 z( D
iterator insert(pos,elem) 0 l% t$ \0 Z' w* L! H
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。& w5 z, u% X; m9 O: k. y) S, J
iterator insert(pos,n,elem)
0 v8 f, J2 }# V: V' ^$ X8 C在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。1 Q8 K, S' M6 C+ L3 H0 ?7 a
iterator insert(pos,first,last) & \4 r s/ V% M" V! S8 J
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
5 X' t* V1 Q9 viterator insert(pos,initlist)
' P j# w9 u/ `在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。- @8 W9 K4 A4 ~+ m) n
+ h) M6 Z: u" K
- H9 X/ G; M$ a, l9 ?0 \1 ^下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
; \; L$ ?4 U; k' L- a8 H& m2 c" j$ q, \* D$ J
& A$ [% J4 q1 M$ O, D#include <iostream> 9 o1 D$ u4 B# h
#include <vector> . O2 t; h) S. V, [& z, U1 m+ x+ {) q/ e9 \
#include <array> * j3 D5 G. ?$ [1 n( [ S9 t
using namespace std;0 ]3 E3 G9 h. V. k. O& M1 n
int main()+ E) {. j% w7 a6 o0 E4 f/ J; ?) Q
{
: c6 [/ J* V* ~) P std::vector<int> demo{1,2};- m, x) x+ y5 | q
//第一种格式用法4 Q( |4 F8 z: v# z
demo.insert(demo.begin() + 1, 3);//{1,3,2}9 Z* v* c5 w$ P( X" W3 z
//第二种格式用法
0 E! x2 p' v! U' O z. W demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
" z! j/ E$ X* j9 k2 j //第三种格式用法
/ R4 _. L. I- o+ ^3 A& o std::array<int,3>test{ 7,8,9 };
8 Q1 g; I: K9 g demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}7 x- l/ z1 g" T) ^' z$ b
//第四种格式用法) ~) o, K: u$ d; v, a# e5 P
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}1 j6 J" k. k: Z& E7 R) Y: M
. c/ b+ p1 @/ k, _( \9 W7 a
return 0;
3 f$ b$ g" _- U}* Z; d; L# w" n. t, v ?
7 W. n2 b+ t$ j: F3 }3 B0 G8 h
) J- g# M+ ~0 c8 d; M5 \/ R
emplace()
}9 w0 Y2 t8 w! Zemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。# f& K" N2 A2 l$ K4 C& E& r% j
! f6 Q: z$ t/ B6 M/ k. \& d" X: Q
! _. A$ X6 \0 o( b
该函数的语法格式如下:$ m( f, r% ~/ C
iterator emplace (const_iterator pos, args...);& J4 Z2 D) P4 w) V& d! d( u
4 O) P" W1 D8 X: r, c5 a! B4 @
( {! Z7 M! ~5 \其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。( X* G/ e) T" H E* ~- _
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。- c6 ]: E; h) n ^, D& D R$ J
#include <vector>, Q4 k' b7 k5 c/ @
#include <iostream>( S4 @: i. x4 q m [" U6 {1 r
using namespace std;; ~4 k/ Z$ R: y; @8 H
int main() 1 N$ c, g; V2 w$ B4 {
{1 N% v/ W1 j# B# u8 R* j/ V
std::vector<int> demo1{1,2};; Y- @* P$ Y) U. S) O
//emplace() 每次只能插入一个 int 类型元素6 c6 B- L- l4 w9 g
demo1.emplace(demo1.begin(), 3);- ^# A, b: b) r! n- T
return 0;
% E9 b! s* D$ M* Y2 {, Y}
) s4 r8 l. q! T. F
* \0 _1 I6 ~5 o [' e7 P$ T
% b& k; x: j$ w结果 3 1 2 , F- l6 A, ^' ?6 r
: u6 E( e( L+ C
, |3 y+ Q# _) J( c* b7 E
|
|