|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数8 B) U; F6 b5 C* w
2 H8 N, J3 I# x' x
$ p3 [' J3 D/ F+ \- linsert()
) _; G- n# r7 E2 M
, s3 e4 F& \7 S, O* C0 a8 |" o" \5 D4 @
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。4 u5 g8 y5 J3 |. {# c' {2 o
7 q" ?% m) o% b& i& u- L0 L% D8 ]
- U, N) t0 N3 l A
iterator insert(pos,elem) 2 M1 ]) F$ g3 }$ q
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。( J( j2 d. f Y" o$ u, c+ X# \
iterator insert(pos,n,elem) 4 _, p0 V4 M5 M1 a: b
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
1 U2 z. w1 B, J/ T" B5 jiterator insert(pos,first,last)
0 z6 J2 E2 b3 g; K在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。8 k# c& z5 y {+ y/ @6 l
iterator insert(pos,initlist) , C2 m, }: h9 h1 E$ s { h
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。/ x1 v) J; i4 @$ T# M+ [
2 T; ^$ V% O; n7 h: ^9 I! [7 ]2 k8 p1 K
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
3 Y# [" w) J& Z$ o' d7 B& t
( O9 A2 X+ t% {- r! v( |/ Y- W0 v6 f
#include <iostream>
. W$ z& B& ~! h2 B4 Z( t#include <vector> 9 m1 u/ v: P- ]* q* c
#include <array> # F* H& D. `1 _8 m3 ~
using namespace std;
, G% Q; L; L: ?* k3 e: q0 Gint main()
* W& X8 G1 _9 k5 K{5 I$ G7 c! T3 F2 V
std::vector<int> demo{1,2};
: f+ f# R- u' D- F //第一种格式用法
: e' M7 j- X4 ~% b: P- \" d demo.insert(demo.begin() + 1, 3);//{1,3,2}
8 G6 K# o2 T% a: { //第二种格式用法
) O" t+ j* e. I0 s4 i( j demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}& ~6 I! y7 d) v- Y
//第三种格式用法# y) e# H' x, ~: R9 G" _4 H6 w5 L
std::array<int,3>test{ 7,8,9 };
5 x9 d4 y* X, w9 S demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}; w: Q2 F( _+ F, l
//第四种格式用法# L n$ K! x) M; j# w4 A: p
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}, b; p/ j# K/ f# [8 g# ]3 V! g
! y! T' k' D. K6 U5 U- Z
return 0;
8 H" T: k6 c* V}
( |3 I' P: c2 c; H- n" n/ ` z$ t
2 T' k) s: u8 P g& O7 N7 R
emplace()
# y. a# ^) k7 _0 Q) ?, jemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。& Q0 k1 M2 H2 \# }1 @
4 A0 |2 M: W# `6 w0 m, j' M: I7 L! H& @! T: Q- e3 a3 Y
该函数的语法格式如下:
* a% z+ U& F8 b2 }iterator emplace (const_iterator pos, args...);
& X% B0 L0 {7 [# n9 X% ~8 \) m# E/ m1 A! x \% a
8 A7 e6 z, z4 ]7 F
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。& T/ `6 c8 I$ @8 C, m$ r, O, ?; [- @
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。6 F/ B l# _6 Z4 n
#include <vector>
* i& Z6 F( z5 J: [2 p0 E! Y#include <iostream>
6 w; n% y1 H9 m" s/ W/ \using namespace std;- K% g! J4 m+ k, s: N3 c- a
int main()
: y3 [. ^ `- d% z) t6 ^/ ^, Y+ u{
9 h; y2 H* x, | std::vector<int> demo1{1,2};
0 N( s) M, `; U) |4 a$ P //emplace() 每次只能插入一个 int 类型元素0 w2 O7 ~+ \9 r T) s! [
demo1.emplace(demo1.begin(), 3);
" D8 z1 ^: a( n9 x/ Z5 l return 0;0 a- r# w: \1 U+ S! _
}
2 |8 v' z) V5 z j/ Z# E
/ ^2 X+ D8 t! {7 F8 p# c" \& W& P7 I5 M0 X( F" l
结果 3 1 2 - Q3 o! g# ^8 Y- e6 i0 U' ?
* E+ P1 A' D; k# ^
* m' z/ v% a) Q$ d) A |
|