|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数6 N7 B0 M0 _+ R
; r% J% H# w+ _+ j. T/ f+ T. G( p8 |4 }+ F- o
insert() A1 H m' T" \4 @" C6 g: r
7 q5 [3 k% E' d5 G. ?6 O0 C, v4 P5 n! G4 E: i A" U1 r
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
/ C6 n2 X# a8 G1 b' k- j. f( \
, s L5 @& M( h0 L1 U2 G* K3 H# F$ P- ~6 C* N
iterator insert(pos,elem)
5 T4 s4 P/ o- }1 G6 c3 C2 ?在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
. Y. p c: s! k& |iterator insert(pos,n,elem)
+ h6 U0 b3 h1 J3 _% x在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
6 X' ]. I) u( y# K% D& i- H. Literator insert(pos,first,last) # C! B6 U" g% P W5 ]
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
8 S; v7 O7 e' X% Aiterator insert(pos,initlist)
- p5 A; K/ x) @# V$ j- s在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。% [) o+ f; R. [5 \* V
9 E6 M# n9 ?6 ?& f+ y, `
" U7 D/ x* X3 J# i, I下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
$ F7 o: b, S5 q1 _+ w) ^ {$ L' M( M4 P% W5 `4 R" d# V( G% f
$ ?2 ]0 P* N# a" ~& e9 f#include <iostream> 7 ?& u$ {: w" d' V7 G, h
#include <vector> , j4 P8 ?) y0 O, g5 z- e" j( y
#include <array>
2 h9 L( s1 D+ t7 B0 `) E# @; t- \using namespace std;+ @4 h1 A8 C9 u) B. l
int main()6 w1 e6 m7 x- A4 e3 |6 G
{
6 I; }9 o+ Z9 K6 _4 O. D& k% u std::vector<int> demo{1,2};
0 ~" ]0 ]5 `7 q1 |6 s/ Z //第一种格式用法
. h2 l+ T2 t+ O9 C% P! L' K5 L demo.insert(demo.begin() + 1, 3);//{1,3,2}
! j. f3 s6 H9 w //第二种格式用法
/ A2 i2 C8 N, L$ s& q demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
: F4 E2 e8 }* a0 @8 l6 G/ T7 q. i //第三种格式用法) K) x2 X$ t% G' J& {
std::array<int,3>test{ 7,8,9 };7 ~3 c# X* _5 d) H: ?! O
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
8 ]; s; I3 k% U- F) l2 G //第四种格式用法4 y9 @* Q# ]& {5 P( V
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}3 K% d5 W, N) D* [5 m; {5 B
, |/ J1 |2 Y; `- W return 0;
% ^* W6 O9 ?; y, F( \$ Z}1 C) j# w2 a! z
( P5 ]; a. H' Z" H- W6 a
u u* W' R* x( h! _emplace()/ P r! d" b7 X7 {
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。% Y M; W ^& q2 h" A" P6 S
# L7 J O/ i c0 L4 r8 \# ]6 A" |
1 ~3 t/ j9 w( |/ D( \8 P
该函数的语法格式如下:
% S: J. F6 _2 a2 Z! f; R5 @iterator emplace (const_iterator pos, args...);1 n$ {( N( |( v
, O: j! k8 |7 o" ?
+ ?* m6 W0 ]% P+ x7 m7 e1 K5 R其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
. }# l( E4 H! e- s' w' S" W简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
, s) Y! d) \* E" d#include <vector>, y3 k" E8 K" g
#include <iostream>( G7 O3 F: H: k0 g
using namespace std;
, j. ^* n3 k i7 m% n# oint main() ! L( j) G, [, H/ Q/ u
{
" d7 Q p5 ?8 p. @/ d7 W std::vector<int> demo1{1,2};
1 ?, w- W0 K6 q! F) K9 A- d6 Y0 E, R //emplace() 每次只能插入一个 int 类型元素! E% {4 f# J, E- V0 y
demo1.emplace(demo1.begin(), 3);5 ? y: |- Q/ i$ Y H3 _; }
return 0;, ?1 w; ]" H6 ^) {: S: O/ }5 @
}
0 n f0 S2 x) u2 Q' J
- n* \1 E% w _$ a; q4 p% W
, n( I9 \" C& p5 l* l0 K2 ^" c4 m" {结果 3 1 2
& |$ Q* u; o5 S" P/ r6 k% `; m* }% {9 M2 k* a1 d7 m
" F) ~, |$ ~6 a. Z; l5 f+ t7 F; ~
|
|