|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数( |- K5 K9 R6 ]* t# X$ x% Q
1 s1 s' j6 q& Q. ?" s/ }& q$ @. B% j- i+ B8 f
insert()" ^, ^" I7 F T% R. t$ h
) [5 Y, \7 |7 ~
' I4 h7 V4 {- S' M+ a* q6 Cinsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
5 I' I, u" R& Z1 z4 }% k/ p' N1 R! l# W2 c
; n: u( L! ?2 V0 a |$ {' T
iterator insert(pos,elem)
8 \1 r& ~1 p# I5 T在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。% J7 P% i7 V( r( M
iterator insert(pos,n,elem) 0 [6 \ l1 K, k) ^2 E* S
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
; |7 V1 h; I3 z6 o3 l- u# |- d$ ^' ]: uiterator insert(pos,first,last) 6 u+ N8 ~/ A' h# |" b. F8 `/ m) }
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。3 d9 |- e1 A3 L8 }$ q& x
iterator insert(pos,initlist)
+ R# Q! |: O) y# _) z在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。 H/ l* p; X& g1 @, |
y! r" ]6 B& a2 \1 d% [4 \& m
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
, B& F2 [2 {7 _9 y" C2 z9 H* M) ]1 I$ @; w V3 ~# U" S
8 n/ z( J9 e, q5 s) r# J8 h. y1 X#include <iostream> 9 ]4 b; k* w2 ?9 R, ~( W0 T0 r
#include <vector> ' x* T0 A' j& b5 u: G
#include <array> ' Y, I7 F$ r. o( n- q! J: i
using namespace std;+ \7 k* R- p0 a5 @* B3 ]3 \
int main(); \3 l# [1 x2 Y* D1 d1 |
{0 s6 [/ q$ M5 c( i5 N. E
std::vector<int> demo{1,2};
6 d7 ]* z3 [$ h" V1 l //第一种格式用法
7 R" x3 R8 e& O; J# E+ ` demo.insert(demo.begin() + 1, 3);//{1,3,2}) T( @4 i" A9 F2 B) @3 t7 a' h; l
//第二种格式用法
) L& V9 h! a* k6 h demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}9 E& n4 K! _) x$ u+ ]$ f
//第三种格式用法2 d& e9 T( @) s" \
std::array<int,3>test{ 7,8,9 };/ J4 h7 |, w% A# K% g
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}$ n6 r! @4 l7 l5 ?7 m: d2 E9 S) N
//第四种格式用法' v; a% r# F4 {2 q0 w7 G9 u# T7 [
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}0 ~1 P2 D* W# u
2 Z: [7 B7 V# o _# l; W5 N return 0;
% w' g1 W9 w: q6 H4 n5 |}& A9 _) g, f$ w! b& p4 a
' y) Q# I2 W/ \: _/ u" {+ c
2 u* _$ x) Y/ N" z# w
emplace()$ K5 U5 k2 ~, F
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
: {+ G# ^" k& l! J8 T( d4 F" s5 A$ E
3 a5 ?6 V. U: }5 E6 Q3 h4 h/ _3 l7 j% d9 U& U& y
该函数的语法格式如下:. X O% e' ~# g7 `$ ^6 R& W2 q
iterator emplace (const_iterator pos, args...);
0 ]" L3 U) F( O5 _/ M9 B5 K2 \% Q; Z) [
% S. ?' M7 X" w* o$ r) [2 Y9 r
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
% u7 u, ]9 k% l+ B: v简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
/ j% N6 T2 |: D5 y! }6 ^#include <vector>
9 K" F& A1 l' Z- x#include <iostream>5 [& p4 T: c' V1 v
using namespace std;( y0 {! N1 _; w% P/ g! t z
int main() 4 W- N6 h+ l) ^2 v# X5 j
{, ]& L/ v3 J+ \4 X9 s
std::vector<int> demo1{1,2};/ d5 J: U# [2 _, p# |/ Q5 o
//emplace() 每次只能插入一个 int 类型元素5 q" [. s2 C4 p' }" [) n% j4 B
demo1.emplace(demo1.begin(), 3);
/ q$ A& B* ?* _+ I7 ~4 c# Z+ G return 0;6 q% w0 E0 } I7 ^$ `, f7 g$ _$ _
}
7 x N$ b) e, m. w: `! t
9 |/ H) f$ s* ^( @2 R8 u
# Y0 Q. _, Y) |1 G, c结果 3 1 2 % X* X+ z- V- }" R" t' {
' e- j6 N( b" w
$ q: V; |" W& g1 W7 C( l |
|