|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
- B6 m, T. M5 J9 \
9 ~ j3 B8 ~7 a( Q! X7 o
2 w V* M$ U( e& a6 q) V% Einsert()! @( i( K4 f5 {: y. D
, u. b& X! V3 @9 V2 `. \" ^$ y/ D
5 R! m+ ^/ }+ m% v0 e1 W+ \; minsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
! M7 w- I+ H7 b& u% T5 o8 ]4 P. o, C( {. y" m& w$ m5 o( R
/ l1 E$ ^6 X. @: i1 o
iterator insert(pos,elem) # }# `* [, T% |, ]# S! ?8 P* @
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。4 e4 [ E; P7 @/ V& S
iterator insert(pos,n,elem)
+ z7 m2 C( v% p$ _9 R在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
2 x) X" @6 } o) giterator insert(pos,first,last)
9 M3 {% m5 g" p2 I' u; s+ Q5 T在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。/ A7 E2 x) `$ s( Z, p. S' k9 D
iterator insert(pos,initlist) % o; o; p1 d$ L" }
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
1 K3 s% J8 D( M1 f' f
3 d+ s% g5 k6 q1 A+ y) k: D
" C! ]% j8 \7 K" ]: ]) ]8 G下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
2 v& F, S) \5 W1 ^. A" y: E# n7 U1 Q1 O- b2 {
* M* B8 g1 Q, W" I#include <iostream>
2 F; p0 Z$ ]) G0 A, Q3 H: s#include <vector> : x% Y8 D/ h. ~. [' B8 s
#include <array> - l4 T) ?, r, H2 [4 N5 L
using namespace std;
, a) Q x7 i2 v4 n8 g6 \+ m" m$ rint main()# l! G4 s. L4 }3 B6 C- P4 l1 ^/ `
{
% i7 |3 H7 H- I std::vector<int> demo{1,2};
" R# k! {" K) d5 L$ M0 K2 P //第一种格式用法
- H# @3 M4 m" L, P demo.insert(demo.begin() + 1, 3);//{1,3,2}9 }6 Q1 b6 O' ?! \8 N6 T
//第二种格式用法
& ]+ f" `. S" u) l! N demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}% S* y( r0 E0 N2 B3 q; j$ r, l
//第三种格式用法1 ^% B! E; {* ]- Z3 ~* S8 ?
std::array<int,3>test{ 7,8,9 };
- X( |* g @; K* H4 X demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}0 Q4 u, h5 w! H L5 F5 I" ?
//第四种格式用法/ Y% n* q6 U+ ]
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}5 I( i+ V5 Z3 A& g# L
3 `* P9 p q8 b; y/ S return 0;
7 ^ T m, n4 K}
, o4 u: Q+ h% m2 ~2 J/ S+ x0 v6 ]* P4 K9 b5 U7 f
* q. e( |5 w9 \% ^- ~) ~
emplace(). }8 P( }# N0 h. z
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。: M! O8 ?. z; B2 ]4 V" k2 v% K0 A
+ e. _" p: X( j. x- M+ k" N; L, c6 K! a1 D# [. ~/ D+ z9 `
该函数的语法格式如下:$ s( l) S9 G/ d
iterator emplace (const_iterator pos, args...);
- N0 Y" ?8 ]/ }2 u1 b: x1 O7 J `7 A, r
r8 C$ N$ w6 G- k0 c2 |
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。9 R& ^$ d8 P5 b! Z% ^
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
7 h# p8 ~0 c& q) I* k+ T#include <vector>
' ?3 @- K5 j% i, L4 i) v% e' U#include <iostream>
% X/ @: z% k+ C0 O+ k5 b7 B( v' [# Husing namespace std;
9 T8 }" M/ n9 Hint main() & L/ R5 H3 d7 ]; V7 \0 `) a5 |- X
{
* L* ~' t* q( j; _; j: V std::vector<int> demo1{1,2};& P/ {5 {' o' @) ^* V% Z! X
//emplace() 每次只能插入一个 int 类型元素: Q( f2 u: f( b/ C1 L
demo1.emplace(demo1.begin(), 3);( m, z, |1 S& }8 Z
return 0;: f- t# l4 m$ @! Z& W9 o, R
}: k7 }4 d! _* S0 f( L
5 v4 ^/ @" U: B9 K) Q$ R! u4 F2 }9 C( ?* T j7 @2 j! `7 p/ K; S
结果 3 1 2 & J4 H, \& O0 I1 F$ w5 U3 z5 X
( q+ J0 n/ \6 p' [; D
! o& `- f2 g( j& p |
|