|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
% x }0 P$ a1 l# X) Z _
0 ]) B) M/ T6 `4 d1 _
( v% g! P% K) c$ p' A$ winsert(). s' L' x. k/ b A) A, M8 M
- Z& q3 A7 |6 X' G- g8 _6 n5 I0 U0 `, F3 |2 ]
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
: B# T6 M" I+ C6 O, V8 O" ?3 M0 ^/ z
5 `! Y' g u; N j- F uiterator insert(pos,elem)
% K/ X! ]% O6 l' P6 P" u+ [在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
8 Q, p, L6 E. k) L, k' w' b- a; Witerator insert(pos,n,elem) ; F& A# u; p; o
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。5 y2 r9 q/ h& K3 O
iterator insert(pos,first,last) - ^! Q% {9 n! a m8 M/ h
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。* m; N& T8 ]8 o/ P& v
iterator insert(pos,initlist)
$ n8 ~5 Q8 x# A& x0 ]+ X在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
: K# J' I" ]* r- C8 _
" l$ k- p( ]+ I+ [
- }1 R1 @5 k8 X# H( o下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。1 T8 c& c. Z/ L
1 e5 I% A w9 N* y! r0 q% a
( D$ t- l& E9 a+ a j4 D
#include <iostream>
; U _" ]$ {7 E, r#include <vector>
4 ~" w4 _) ]* h8 s% I#include <array>
3 t! {3 A G' w8 `7 Q eusing namespace std;
% y0 J1 s7 D# r, w4 Z& mint main()
" h4 S1 c+ e! a6 A5 M! ?9 N{. M& P, D: v8 }; R
std::vector<int> demo{1,2};: R5 M- T. v5 a- q# j7 E- R
//第一种格式用法
. T' K7 l7 M, x6 C! C) ` demo.insert(demo.begin() + 1, 3);//{1,3,2}9 m2 n& X# L A, p
//第二种格式用法
0 `: f7 K" n; ~! B3 \% @$ T3 c demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}2 D$ t2 [ s# X# d
//第三种格式用法5 l7 r3 p7 Y' ]; t' `* W- G8 D( G2 ^
std::array<int,3>test{ 7,8,9 };: K7 I; l8 `: B' q3 P
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
6 a8 e4 V3 B8 L* k% L7 C //第四种格式用法
" h! e# t/ s# D2 a4 j6 [ demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}. Z' j5 ~% h8 e2 U0 f
0 G" w0 A. Y" A, G7 Q5 G0 A return 0;
8 W0 F1 Z% e8 I* T}; o' ^) |, n; }: r/ D
) N8 w* |* H! Z
& _2 `! M( @) W7 v, P! gemplace()
. k$ L9 O$ B" Zemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
3 g3 i0 p9 ?" M3 o# K
6 F- n, z( ^( R, j$ c2 v
, J5 w/ b* i$ l. s/ S* }; \. \* L" g该函数的语法格式如下:" S; Q- G: l+ i3 @9 { ~6 `
iterator emplace (const_iterator pos, args...);) r5 w) O0 D9 i; W$ Q1 b, C
# b) Z! |% T7 v8 B& r
" {4 l, k1 H% r; v
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。. i! `+ |" w0 {6 w8 t
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
4 F1 Y0 F" i0 ~0 Q9 j#include <vector>
2 s# Y* W2 `0 l0 ~$ u1 [/ d#include <iostream>
+ m8 ?9 R3 i% yusing namespace std;5 o; W$ f; q. W+ _& E
int main() 0 G0 T% u8 r( r. G+ n7 ]
{
# ?5 w- G: x* k0 ~8 f: _ std::vector<int> demo1{1,2};
' n9 y0 \2 l6 z$ D' X, d, [ //emplace() 每次只能插入一个 int 类型元素' I8 Y0 r6 z3 w- b
demo1.emplace(demo1.begin(), 3);
, u; E5 D% N/ { return 0;
, |" _4 g6 m) n1 R5 O) n}, O9 F( o) _5 }% ]) p' {4 M4 |
$ U/ P4 q# q0 F3 c w) p7 y6 _
; {8 k6 V! [- n- u, ]. y+ T& Y结果 3 1 2
1 P4 J g$ c Z: T1 j7 u/ ?. M
! I9 Q% [6 a7 _1 j: h3 t" \! l5 [. o7 ]6 N1 V7 g, `
|
|