vector 容器可以使用 vectorName.insert() 方法插入元素,vectorName.insert() 函数一共有4种重载方法:

第一种 insert() 用法在指定地址插入单个元素

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10
11 cout << "==========遍历容器===========" << endl;
12
13 for (int i = 0; i < num.size(); i++)
14 {
15 cout << num.at(i) << endl;
16 }
17
18 num.insert(num.begin(), 888); //初始位置插入 888 ,第一个参数需使用迭代器来确认插入位置
19
20 cout << "===使用 insert() 后遍历容器===" << endl;
21
22 for (int i = 0; i < num.size(); i++)
23 {
24 cout << num.at(i) << endl;
25 }
26
27 return 0;
28 }

打印结果:

由于第一个参数是迭代器,由于是地址,我们也可以对其进行地址加减操作进行元素插入,比如在第二个元素后插入元素,我们用 insert() 可以这样写:

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10
11 cout << "==========遍历容器===========" << endl;
12
13 for (int i = 0; i < num.size(); i++)
14 {
15 cout << num.at(i) << endl;
16 }
17
18 num.insert(num.begin() + 2, 888); //初始位置插入 888 ,第一个参数需使用迭代器来确认插入位置
19
20 cout << "===使用 insert() 后遍历容器===" << endl;
21
22 for (int i = 0; i < num.size(); i++)
23 {
24 cout << num.at(i) << endl;
25 }
26
27 return 0;
28 }

打印结果:

第二种 insert() 用法在指定地址插入多个元素

最普通的多个元素插入:

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10
11 cout << "==========遍历容器===========" << endl;
12
13 for (int i = 0; i < num.size(); i++)
14 {
15 cout << num.at(i) << endl;
16 }
17
18 num.insert(num.begin(), 3, 888); //初始位置插入3个 888 ,第一个参数需使用迭代器来确认插入位置
19
20 cout << "===使用 insert() 后遍历容器===" << endl;
21
22 for (int i = 0; i < num.size(); i++)
23 {
24 cout << num.at(i) << endl;
25 }
26
27 return 0;
28 }

打印结果:

与第一种用法一样,由于第一个参数是迭代器地址,可以通过地址加减控制插入位置。

第三种 insert() 用法在指定地址插入其他容器的迭代器

我们也可以将其他同类型容器的元素插入到当前容器,如下代码使用三个迭代器来插入多个元素:

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10 vector<int>num_1(test + 2, test + 4);
11
12 cout << "==========遍历容器===========" << endl;
13
14 for (int i = 0; i < num.size(); i++)
15 {
16 cout << num.at(i) << endl;
17 }
18
19 num.insert(num.begin(), num_1.begin(), num_1.end()); //初始位置插入 从 begin 到 end 的元素
20
21 cout << "===使用 insert() 后遍历容器===" << endl;
22
23 for (int i = 0; i < num.size(); i++)
24 {
25 cout << num.at(i) << endl;
26 }
27
28 return 0;
29 }

打印结果:

===========================================================================================================================

STL—— 容器(vector)的数据插入之 insert()的更多相关文章

  1. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

  2. STL—— 容器(vector)数据插入insert()方法 的返回值

    vector 容器下的 insert() 方法拥有返回值,由于insert() 方法拥有4种重载函数,他的返回值不尽相同. 第一种,插入单个元素后的返回值: 1 #include <iostre ...

  3. [C++]STL容器Vector的内存释放

    直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...

  4. STL容器vector应用注意事项

    [1]提前分配足够空间以免不必要的重新分配和复制代价 关于vector容器重新分配和复制及析构释放的代价,请参见随笔<STL容器之vector>. 应用示例对比代码如下: #include ...

  5. STL容器 vector,list,deque 性能比较

    C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差 ...

  6. STL容器 -- Vector

    核心:Vector 是 STL 里的一个向量容器,可以像数组那样进行随机访问,能在尾部插入元素,对于元素的删除和插入可以动态管理内存. 头文件: #include <vector> 构造函 ...

  7. STL - 容器 - vector简单应用

    VectorTest.cpp #include <vector> #include <iostream> #include <string> #include &l ...

  8. STL容器底层数据结构的实现

    C++ STL 的实现: 1.vector      底层数据结构为数组 ,支持快速随机访问   2.list            底层数据结构为双向链表,支持快速增删   3.deque     ...

  9. [转]STL 容器一些底层机制

    1.vector 容器 vector 的数据安排以及操作方式,与 array 非常相似.两者的唯一区别在于空间的运用的灵活性.array 是静态空间,一旦配置了就不能改变,vector 是动态数组.在 ...

随机推荐

  1. 【python爬虫】用requests库模拟登陆人人网

    说明:以前是selenium登陆取cookie的方法比较复杂,改用这个 """ 用requests库模拟登陆人人网 """ import r ...

  2. centos搭建dns服务

    原文:(https://www.myjinji.top/articles/2020/04/02/1585800289945.html)[https://www.myjinji.top/articles ...

  3. HDU100题简要题解(2060~2069)

    这十题感觉是100题内相对较为麻烦的,有点搞我心态... HDU2060 Snooker 题目链接 Problem Description background: Philip likes to pl ...

  4. tp5 上传视频方法

    控制器调用 /** * 视频上传 */ public function video_add(){ if (request()->isPost()){ $video = $_FILES['vide ...

  5. codeforces 1426F,初学者也能做,div3的最难题

    大家好,欢迎阅读codeforces专题. 今天选择的题目是Div3比赛的最后一题,也是最难的一道题.选这道题的主要原因是帮助大家建立信心,因为有些小伙伴给我反应说之前选择的题目有些难了,觉得自己可能 ...

  6. 为什么思维导图软件MindManager成为了企业培训必备的工具

    企业培训,无论是前期准备.中间的演讲演示.还是后期的总结整理等.MindManager都可以以不同的形式,给你更好的培训方式.下面就来看看MindManager是怎么协助企业培训的吧: 前期准备--制 ...

  7. Sonar检测Math.abs(new Random().nextInt()) “Use the original value instead”

    今天早上旁边同事喊我看一个Sonar检测出的问题: 当时看了好几眼没觉得这个有太大问题,于是又看了下Sonar建议: 这是说Math.abs()方法使用在数字上面可能返回最小值,觉得这个挺有意思的,于 ...

  8. jmeter录制请求

    用了一段时间的jmeter感觉比LR方便很多,界面也比较简洁,开源免费,配置环境也方便,LR简直没法比,但唯一的是功能没有LR强大,毕竟是免费的,要求别那么高. 下面开始进入正题,配置环境和下载就不多 ...

  9. JavaSE 学习笔记05丨泛型、集合

    Chapter. 10 泛型 10.1 泛型程序设计 泛型,指可以在类或方法中预支地使用未知的类型.泛型程序设计(Generic programming),意味着编写的代码可被很多不同类型的对象所重用 ...

  10. 放进你的收藏夹吃灰!Linux 运维必备的 40 个命令总结

    1.删除0字节文件 find -type f -size 0 -exec rm -rf {} ; 2.查看进程 按内存从大到小排列 PS -e -o "%C : %p : %z : %a&q ...