|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数' `. o8 S4 B4 {& W
) R/ |8 w2 F9 H1 [' o$ S! _
" c9 W/ ? X4 s0 Binsert()
% v( j. T& d' {& i
( u X/ o4 |- U& O8 D
0 x7 v$ O+ y9 r0 i8 Rinsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
2 B9 ]' d5 d- z. ]
2 V8 \2 r- G8 S& h3 _( h
/ ]: V, [3 ^. T5 Q) titerator insert(pos,elem) + w/ [+ g7 y- v/ u
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
+ K- R. |3 W. v9 Fiterator insert(pos,n,elem) & T" b2 O, h) l& l
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。0 ]+ w9 n/ a* u; w( E* {
iterator insert(pos,first,last)
& R' p1 A$ c5 W4 \7 V4 I/ L$ k在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。0 Q" b: \% s# N. h+ \5 x
iterator insert(pos,initlist)
' i/ ?/ L7 K0 E( V) q) g1 ~在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
% q* ]% V0 s$ j* K2 [; p) j! Y/ u6 _
+ h7 |1 z0 s0 M: Q4 U# u7 X
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。! A I& Y3 U* Y# Q5 V9 h/ s1 X
4 l$ F% F/ j; b3 ^
/ L' M U" \$ }' c/ M; x#include <iostream>
8 Y5 @5 `1 }8 A1 P4 \0 @#include <vector> 6 t2 x! G9 J& e* ]4 m
#include <array>
' R; [: s& t+ D; w3 g+ Rusing namespace std;
# \: \, ]4 E5 Cint main()" `6 I/ ]1 l* D& z6 Q
{
% b0 L# M/ d& f( Q5 {$ s std::vector<int> demo{1,2};
6 B1 U2 S" H1 s' h' | //第一种格式用法
) ^. C" D! X; f, c3 p2 W+ t" ^ demo.insert(demo.begin() + 1, 3);//{1,3,2}
. b4 s7 S1 z' i0 s2 i //第二种格式用法5 y8 k, t' O5 v! T, {
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}; _3 n& M6 u, U7 B3 o6 t. |
//第三种格式用法
3 ]5 y. \* m' Y: { std::array<int,3>test{ 7,8,9 };/ h! W* |0 ?, |; A0 N7 [
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
1 }! a) N1 @& ? //第四种格式用法
4 J# E! W. l' I demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
" y T0 r9 [/ O3 z
3 Y* x" l% u' c: J9 \$ T return 0;
9 _6 R: i+ Y2 D}
+ R0 i7 W* @5 A4 n( [9 [# x
4 i9 ?: Z; x" e- B2 m# D
K, n4 O% P( A7 K! P2 Uemplace()6 K- M$ ]0 B) e2 F0 x
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
& D! ~% a3 n) F/ p
- L8 j9 {0 Z$ B! r/ p
/ B4 _3 m7 H! P8 w& }该函数的语法格式如下:8 z# D* Q$ R9 r9 Z6 q
iterator emplace (const_iterator pos, args...);- n5 n+ H* f) B& v4 ?6 C
v& h8 ]3 P* ^! o
; E5 ]9 ^6 m' Z8 E+ B8 U5 D
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
$ I, x3 S) Q+ y$ t# x简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。* _& x! ?8 ]6 O' E# x. u
#include <vector>) i1 x M; u- V6 z# s
#include <iostream># U- g8 b* Q; q3 X
using namespace std;+ N$ I0 j0 P9 e+ d
int main() % u. I; P# K( O- a" ^
{# V& A) c2 P0 s3 Z3 i5 x
std::vector<int> demo1{1,2};, ?5 C/ x! J# d
//emplace() 每次只能插入一个 int 类型元素
1 W1 N" i% \& Y# S, p) X/ N+ q demo1.emplace(demo1.begin(), 3);
4 t3 K1 ?9 A9 i: Z return 0;0 K: E( [: C7 ~5 i& [8 ^( U
}
: i5 j+ c" l! {% s+ C6 }/ [3 ^; o% Y; G( ~# _; |
7 ?! t- S, p+ y; M2 ^9 n5 }! z
结果 3 1 2
+ E+ X& b4 }3 B7 r" n" A# l2 F8 u" ^/ b; W7 m# o
( ?9 g/ j% k0 S! s- V1 `- t |
|