|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
S) x* a3 `4 g
! P% R) r( ]5 W4 L4 i( x! f6 z# I. F0 V2 }! _
insert()
4 T+ I$ c9 s( w$ ^, ]1 m, {/ @! E' @1 s5 b' T7 q
8 X9 s% j1 j" \
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
# u& B) w# j) r8 m0 \( l* J
7 N9 G8 j% ^: H, `0 K2 {/ L3 B) o' I! h- i# z1 A
iterator insert(pos,elem)
3 n' Y; h g! J8 N2 O" v$ _1 S- J9 I在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
( z! k! q8 {2 X0 w3 @iterator insert(pos,n,elem) 3 X8 z# ~; B k% o- C- }. G
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。% O6 q; c) j1 M" Y8 b* U4 g
iterator insert(pos,first,last) " E4 A' `$ E, ?' ~8 f" G. I( F$ {
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
6 l' m* f2 G/ C: h3 h2 T" ^! s" jiterator insert(pos,initlist) n0 S* c: n8 A+ x4 \
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
( m/ w* }; h. l4 n ?9 Q* D. s, `1 \7 M5 @. a7 T& A7 ^$ M, o$ U
. Z$ c$ `. O7 q& N# o. V下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。2 N( g U- u/ h
: J6 n j! Q& t/ h+ U3 ?1 B! Y& V
8 K& ^6 V, i0 L! F' n. r#include <iostream> 3 O& k6 v U; e9 ^9 e! r; w% t! u& h
#include <vector> ( e+ |3 T. E- n+ v0 A( U: m
#include <array>
/ d3 B! A0 X, p- wusing namespace std;
/ j' ]4 V4 f7 D3 c1 G% T, _int main()
/ K% E6 @ W1 M3 w. x X{
6 p; i, }- P: Y: E1 l+ o std::vector<int> demo{1,2};( x' j* Y6 s8 B- B. u; Z# C* Y( v
//第一种格式用法6 J& k0 P, B' R7 F2 m: O
demo.insert(demo.begin() + 1, 3);//{1,3,2}3 `2 ?" x; d7 d( u8 H& r% f' a
//第二种格式用法% B7 }& h( b. C5 v V5 M* p, V v
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}; z5 Z5 }/ W" d( m$ `7 ~$ e
//第三种格式用法0 c) O( i9 E x: X
std::array<int,3>test{ 7,8,9 };
' g1 |2 W8 c8 S# _ demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
1 e1 c. K8 Q0 C" Z9 @5 y4 i //第四种格式用法/ O5 k, n: c" e4 c; Q
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
( Q3 h- q) F3 k+ O* S: ?; n 0 x/ U. }; d4 S- n$ g6 H u3 B
return 0;
: ?. J3 ?6 p" _/ x2 L- X( B4 E0 Q}
( H# c) m; O# C. J# B: D/ k+ n6 B& X! R4 b" d/ ]: Z3 I
: O' @7 r8 W+ [$ \7 kemplace()
. \) j' g4 _- [* h Iemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
- r8 J2 |4 V, |. w* e/ T: G9 d( S
2 V: r1 i2 `( U1 k, Z* P# @7 x: |0 N2 u6 U6 ^; r- D% X
该函数的语法格式如下:
5 z/ A* X' X. B9 T" siterator emplace (const_iterator pos, args...);% o1 ?$ i' L q5 `4 a
2 _% U2 s1 N8 E2 F0 T3 B. n
1 _7 J; [$ }- q0 v4 c3 u9 l/ J其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。5 c* B0 b6 a( z* J
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
3 g0 f+ R$ \1 N4 P6 \6 L#include <vector>9 z' g7 I( h0 o. k+ B. A
#include <iostream>" a$ J! w. h! @- z9 Q
using namespace std;
1 v& x N. t) K1 V- F o! i! aint main()
! x. o2 ?' _0 W( J. M$ S( X{, N6 R6 u* G" Y' }7 H; ^ m, h
std::vector<int> demo1{1,2};! m5 O9 E" Z8 V5 j- {
//emplace() 每次只能插入一个 int 类型元素
2 }6 C* j" ~/ Q& w: g7 l, R3 [2 w demo1.emplace(demo1.begin(), 3);
- \, S. D- j3 ?) \6 E return 0;+ P! Y5 v7 {1 b
}
8 H! ^& r4 d$ U- q) k6 [5 D5 g. b) b
4 f. K1 O, l, O; O0 P
结果 3 1 2
: o! I- w7 y5 u' `! d4 G' x G. x7 _+ E, w
( L, D0 x/ n3 @
|
|