目录

Vector

1、创建一个名为V的vector容器 整型数组

2、vector容器中存放自定义的数据类型

3、vector容器嵌套容器

Vector遍历打印函数

vector容器_构造函数

1、默认构造 无参构造

2、通过区间方式进行构造

3、n个elem方式构造

4、拷贝构造

vector赋值操作

1、创建V1 并赋值

2、赋值 operator=

3、assign

4、n个elem 方式赋值

vector容量和大小

1、创建V1 并赋值

2、empty判断是否为空

3、capacity计算容量

4、size计算大小

5、resize重新指定大小

vector的插入和删除

1、创建V1

2、尾插

3、尾删

4、插入

5、删除

6、清空

vector数据存储

1、利用[]方式访问数组中的元素

2、利用at方式访问元素

3、获取第一个元素

4、获取最后一个元素

vector容器_互换容器

1、具体用法

2、实际用途

vector预留空间

1、利用reserve预留空间

2、利用reserve预留空间的好处

案例—评委打分

1、案例描述:

2、实现步骤:

案例—员工分组

1、案例描述:

2、实现步骤


Vector

STL中最常用的容器Vector 可以理解为数组 
Vector存放内置数据类型
//容器:vector 
//算法:for_each
//迭代器:vector<int>::iterator

1、创建一个名为V的vector容器 整型数组

a、插入数据

//创建一个名为V的vector容器 整型数组vector<int> V;//向容器中插入数据V.push_back(10);V.push_back(20);V.push_back(30);V.push_back(40);

b、遍历数据

第一种遍历方式:通过迭代器访问容器中的数据

vector<int>::iterator itBegin = V.begin();//起始迭代器  指向容器中第一个元素vector<int>::iterator itEnd = V.end();//结束迭代器 指向容器中最后一个元素的下一个位置while (itBegin != itEnd){cout << *itBegin << endl;itBegin++;}

第二种遍历方式:for循环法

for (vector<int>::iterator itB = V.begin(); itB != V.end(); itB++){cout << *itB << endl;}

第三种遍历方式:for_each

首先自定义打印函数:

void MyPrint1(int val)
{cout << val << endl;
}

接着:

for_each(V.begin(), V.end(), MyPrint1); 

注意添加:#include<algorithm>//标准算法头文件

2、vector容器中存放自定义的数据类型

首先创建一个Person类:

class Person
{
public:Person(string name, int age){this->m_age = age;this->m_name = name;}string m_name;int m_age;
};

A、创建一个名为P的vector容器 Person型数组

a、插入数据


void test02()
{//创建一个名为P的vector容器 Person型数组vector<Person> P;Person P1("aaa", 23);Person P2("bbb", 25);Person P3("ccc", 24);Person P4("ddd", 22);Person P5("eee", 21);//向容器中插入数据P.push_back(P1);P.push_back(P2);P.push_back(P3);P.push_back(P4);P.push_back(P5);

b、遍历容器中的数据

第一种遍历方式:通过迭代器访问容器中的数据

vector<Person>::iterator itBegin = P.begin();//起始迭代器  指向容器中第一个元素vector<Person>::iterator itEnd = P.end();//结束迭代器 指向容器中最后一个元素的下一个位置while (itBegin != itEnd){cout << " 姓名: " << itBegin->m_age << endl;cout <<  " 年龄: " <<itBegin->m_name << endl;itBegin++;}

第二种遍历方式:for循环

for (vector<Person>::iterator itB = P.begin(); itB != P.end(); itB++){cout << " 姓名: " << itB->m_age << endl;cout << " 年龄: " << itB->m_name << endl;}

第三种遍历方式:for_each

首先自定义打印函数:

void MyPrint2(Person P)
{cout << " 姓名: " << P.m_name<< endl;cout << " 年龄: " << P.m_age<< endl;
}

接着:

for_each(P.begin(), P.end(), MyPrint2); 

注意包含头文件:#include<algorithm>//标准算法头文件

B、创建一个名为P的vector容器 Person*型数组

a、插入数据:

vector<Person*> P;Person P1("aaa", 23);
Person P2("bbb", 25);
Person P3("ccc", 24);
Person P4("ddd", 22);
Person P5("eee", 21);//向容器中插入数据
P.push_back(&P1);
P.push_back(&P2);
P.push_back(&P3);
P.push_back(&P4);
P.push_back(&P5);

b、遍历容器中的数据

第一种遍历方式:通过迭代器访问容器中的数据

vector<Person*>::iterator itBegin = P.begin();//起始迭代器  指向容器中第一个元素vector<Person*>::iterator itEnd = P.end();//结束迭代器 指向容器中最后一个元素的下一个位置while (itBegin != itEnd){cout << " 姓名: " << (*itBegin)->m_age << endl;cout << " 年龄: " << (*itBegin)->m_name << endl;itBegin++;}

第二种遍历方式:for循环

for (vector<Person*>::iterator itB = P.begin(); itB != P.end(); itB++){cout << " 姓名: " << (*itB)->m_age << endl;cout << " 年龄: " << (*itB)->m_name << endl;}

第三种遍历方式:for_each

首先自定义打印函数:

void MyPrint3(Person* P)
{cout << " 姓名: " << P->m_name << endl;cout << " 年龄: " << P->m_age << endl;
}

接着:

for_each(P.begin(), P.end(), MyPrint3);  

注意包含头文件:#include<algorithm>//标准算法头文件

3、vector容器嵌套容器

a、首先创建5个小容器 并添加数据

 vector<vector<int>> V;//创建小容器vector<int>V1;vector<int>V2;vector<int>V3;vector<int>V4;vector<int>V5;//向小容器中添加数据for (int i = 0; i < 5; i++){V1.push_back(i + 1);V2.push_back(i + 2);V3.push_back(i + 3);V4.push_back(i + 4);V5.push_back(i + 5);}

b、将小容器添加到大容器中

 V.push_back(V1);V.push_back(V2);V.push_back(V3);V.push_back(V4);V.push_back(V5);

c、通过大容器 将所有数据遍历一遍

for (vector<vector<int>>::iterator itB = V.begin(); itB != V.end(); itB++){for (vector<int>::iterator itb = (*itB).begin(); itb != (*itB).end(); itb++){cout << *itb << " " << endl;}}

Vector遍历打印函数

void PrintVector(vector<int>& V)
{for (vector<int>::iterator it = V.begin(); it != V.end(); it++){cout << *it << " ";}cout << endl;
}

vector容器_构造函数

1、默认构造 无参构造

vector<int> V1;

2、通过区间方式进行构造

vector<int>V2(V1.begin(), V1.end());

3、n个elem方式构造

vector<int>V3(10, 10);

4、拷贝构造

vector<int>V4(V3);

结果:

vector赋值操作

1、创建V1 并赋值

vector<int>V1;for (int i = 0; i < 10; i++){V1.push_back(i);}

2、赋值 operator=

vector<int> V2;V2 = V1

3、assign

vector<int> V3;V3.assign(V1.begin(), V1.end());

4、n个elem 方式赋值

vector<int> V4;V4.assign(10, 100);

结果:

vector容量和大小

1、创建V1 并赋值

vector<int>V1;for (int i = 0; i < 10; i++){V1.push_back(i);}

2、empty判断是否为空

if (V1.empty())

判断是否为空 返回值为真则为空

3、capacity计算容量

V1.capacity()

4、size计算大小

V1.size()

5、resize重新指定大小

V1.resize(15, 10);

利用重载的版本 可以利用参数2指定默认填充值

V1.resize(5);

重新指定大小 若指定的大小更小 超出的元素会被删除

结果:

vector的插入和删除

1、创建V1

vector<int>V1;

2、尾插

V1.push_back(10);
V1.push_back(20);
V1.push_back(30);
V1.push_back(40);
V1.push_back(50);

3、尾删

V1.pop_back();

4、插入

V1.insert(V1.begin(), 2, 100);

在V1的开头插入2个100

5、删除

V1.erase(V1.begin());

6、清空

V1.erase(V1.begin(), V1.end());

等同于V1.clear()

结果:

vector数据存储

1、利用[]方式访问数组中的元素

for (int i = 0; i < V1.size(); i++){cout << V1[i] << " ";}

2、利用at方式访问元素

for (int i = 0; i < V1.size(); i++){cout << V1.at(i) << " ";}

3、获取第一个元素

 V1.front()

4、获取最后一个元素

V1.back()

结果:

vector容器_互换容器

1、具体用法

V1.swap(V2);

结果:

2、实际用途

vector<int>(V1).swap(V1);

巧用swap收缩内存

结果:

vector预留空间

1、利用reserve预留空间

V1.reserve(10000);

2、利用reserve预留空间的好处

利用reserve预留空间之后

案例—评委打分

1、案例描述:

有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中的最低分,取平均分。

2、实现步骤:

a、创建五名选手,放在vector中

首先要创建选手类

class Person
{
public:Person(string name, int score){m_name = name;m_score = score;}string m_name;int m_score;
};

接着创建选手

void CreatePerson(vector<Person>&v)
{string nameSeed = "ABCDE";for (int i = 0; i < 5; i++){string name = "选手";name += nameSeed[i];int score = 0;Person P(name, score);//将创建的Person对象 放入到容器中v.push_back(P);}
}

b、遍历vector容器,取出来每一位选手,执行for循环,可以把10个评分都存放在deque容器中

for (vector<Person>::iterator it = v.begin(); it != v.end(); it++){//将选手的打分放在deque容器中deque<int>d;for (int i = 0; i < 10; i++){//随机数分数输入int score = rand() % 41 + 60;//产生60到100之间的随机数d.push_back(score);}
}

c、sort算法对deque容器中分数排序,去除最高和最低分

//排序
sort(d.begin(), d.end());//去除最高分去除最低分
d.pop_back();
d.pop_front();

d、获取平均分

int sum = 0;
for (deque<int>::iterator itb = d.begin(); itb != d.end(); itb++)
{sum += *itb;
}int avg = sum / d.size();

e、展示最后分数

void ShowScore(vector<Person>&v)
{for (vector<Person>::iterator it = v.begin(); it != v.end(); it++){cout << (*it).m_name << " 分数:" << (*it).m_score << endl;}
}

案例—员工分组

1、案例描述:

1.1公司招聘了10个员工(ABCDEFGHIJ),10名员工进入公司之后,需要指派员工在那个部门工作

1.2员工信息有:姓名 工资组成;部门分为:策划、美术、研发

1.3随机给10名员工分配部门和工资

1.4通过multimap进行信息的插入key(部门编号)value(员工)

1.5分部门显示员工信息

2、实现步骤

2.1创建10名员工,放在vector容器中

void CreatePerson(vector<Person>&P)
{string NameSeed = "ABCDEFGHIG";for (int i = 0; i < 10; i++){Person PP;PP.m_name = "员工";PP.m_name += NameSeed[i];PP.m_salary = rand() % 10000 + 10000;//将员工放在容器中P.push_back(PP);}}

2.2遍历vector容器,取出每个员工,进行随机分组

void SetGroup(vector<Person>&P, multimap<int, Person>&mPerson)
{for (vector<Person>::iterator it = P.begin(); it != P.end(); it++){int deptId = rand() % 3 + 1;}
}

2.3分组后,将员工部门编号作为key,具体员工工作为value,放入到multimap容器中

//将员工插入到分组中
//key作为部门编号 value作为具体员工
mPerson.insert(make_pair(deptId, *it));

2.4分部门显示员工信息

void ShowPerson(multimap<int, Person>&mP)
{cout << "策划部门:" << endl;multimap<int, Person>::iterator pos1 = mP.find(CEHUA);int count1 = mP.count(CEHUA);int index1 = 0;for (; pos1 != mP.end() && index1 < count1; pos1++, index1++){cout << "编号:" << pos1->first << " 姓名:" << pos1->second.m_name << " 薪水:" << pos1->second.m_salary << endl;}cout << "-------------------------------" << endl;cout << "美术部门:" << endl;pos1 = mP.find(CEHUA);count1 = mP.count(CEHUA);index1 = 0;for (; pos1 != mP.end() && index1 < count1; pos1++, index1++){cout << "编号:" << pos1->first << " 姓名:" << pos1->second.m_name << " 薪水:" << pos1->second.m_salary << endl;}cout << "-------------------------------" << endl;cout << "研发部门:" << endl;pos1 = mP.find(CEHUA);count1 = mP.count(CEHUA);index1 = 0;for (; pos1 != mP.end() && index1 < count1; pos1++, index1++){cout << "编号:" << pos1->first << " 姓名:" << pos1->second.m_name << " 薪水:" << pos1->second.m_salary << endl;}}

//随机数种子
srand((unsigned int)time(NULL));

STL(标准模板库)—Vector相关推荐

  1. 补8-5日复习内容 STL 标准模板库的容器

    //有关 STL 标准模板库的函数 /* string 的 */ /* #include <iostream> #include <string> #include <w ...

  2. STL 标准模板库—容器部分【C++】

    STL标准模板库 包含内容: 容器类:vector.list.deque.set.map等 迭代器:"泛型指针",每个容器都有自己的迭代器,[vector和deque的迭代器是随机 ...

  3. 19.3 C++STL标准模板库大局观-容器的说明和简单应用例续

    19.1 C++STL标准模板库大局观-STL总述.发展史.组成与数据结构谈 19.2 C++STL标准模板库大局观-容器分类与array.vector容器精解 19.3 C++STL标准模板库大局观 ...

  4. 信息学奥赛中的STL(标准模板库)--2022.09.30

    1.信息学奥赛一本通 第5版 第8章 C++实用技巧与模版库(6节) 第一节  排序算法 第二节 运算符重载 第三节  字符串(string) 第四节 FIFO队列和优先队列 第五节  动态数组 第六 ...

  5. 19.1 C++STL标准模板库大局观-STL总述、发展史、组成与数据结构谈

    19.1 C++STL标准模板库大局观-STL总述.发展史.组成与数据结构谈 19.2 C++STL标准模板库大局观-容器分类与array.vector容器精解 19.3 C++STL标准模板库大局观 ...

  6. C++ STL 标准模板库介绍与入门

    目录 1.概述 1.1.C++ 标准库 1.2.Boost库 2.STL 版本 2.1.HP 原始版本 2.2.P. J. 实现版本 2.3.RW 实现版本 2.4.SGI 实现版本 2.5.STLp ...

  7. 【跟学C++】C++STL标准模板库——算法详细整理(下)(Study18)

    文章目录 1.简介 2.STL算法分类及常用函数 2.2.变序算法(二) 2.2.1 替换算法(2个) 2.2.2 排序算法(6个) 2.2.3 分区算法(4个) 2.2.4 可用于排序容器的算法(3 ...

  8. C++入门到精通 ——第七章 STL标准模板库大局观

    七.STL标准模板库大局观 Author: XFFer_ 先分享一本 <C++ 标准库 第二版> ,望在STL的道路上从入门到放弃!(开玩笑的啦,愈行愈远~) 链接: https://pa ...

  9. C++提高编程----STL标准模板库-常用容器

    STL标准模板库(Standard Template Library)-常用容器 C++的,面向对象和泛型编程,目的就是提高代码的复用性:为了建立数据结构和算法的统一标准,诞生了STL 一.STL初识 ...

最新文章

  1. DotNetNuke(DNN)网站发布、部署、迁移和重建
  2. 如何用Fiddler对手机(安卓/iOS)数据进行抓包
  3. 网页编程技术二(块级元素和行内标签)
  4. Scala里Unit 与 () Unit的区别
  5. python数据库连接池neo4j_在python中操作neo4j数据库的方法
  6. 《史蒂夫·乔布斯传》(Steve Jobs)官方正式中文版高清PDF
  7. 网络规划设计师水平考试备考资料(11.分析总结)
  8. m05_Extract Feature_Transformers(慎variances_)_download Adult互联网ads数据集_null value(?_csv_SVD_PCA_eigen
  9. 【USB笔记】设备功能描述符Device Capability Descriptor
  10. 外贸邮箱服务器设置,外贸邮客户端设置方法?
  11. PotPlayer播放DST音频的mkv电影解码错误
  12. java计算机毕业设计-线上自助旅游报名网-源程序+mysql+系统+lw文档+远程调试
  13. 王者荣耀角色信息在哪个服务器,怎么查询王者荣耀角色在哪个区
  14. Linux——进程、任务和线程
  15. mpvue 如何使用腾讯视频插件?
  16. 爆款!如何利用知乎引上万流量,我是这样做的!|实战
  17. 瑞友-项目经理培训 总结
  18. 对Unity一个Shader编译Bug的分析(Unrecognized sampler 'samplerunity_lightmap)
  19. DA14580外设篇之定时器和PWM
  20. 删除的视频怎么恢复?

热门文章

  1. 微信小程序Canvas卡顿优化解决方法
  2. QT使用QStackedWidget实现切页显示
  3. 视频批量截取方法,怎样同时对多个视频的一部分进行截取?
  4. android_button onclick点击事件的5种写法
  5. 新上线的材料计算超算云平台Mcloud V2.0版本推出全新功能——web端工作流拖拽提交作业+便捷web端建模
  6. 第九章:CSDN记忆
  7. python程序下载腾讯企业邮箱附件_python3使用腾讯企业邮箱发送邮件的实例
  8. 【Java】Swing入门
  9. 如何快速高效出高质量效果图
  10. Comparable的compareTo