当前位置: 首页 > news >正文

c++学习第十四讲---STL常用容器---vector容器

vector容器:

1.vector基本概念:

vector功能与数组类似,与数组不同的是,vector可以动态扩展。

2.vector构造函数:

vector<T> v;                         //默认构造函数,创建数据类型T的容器

vector(v.begin(), v.end());     //将v[begin(), end()) 区间中的元素拷贝给本身

vector(n, elem);                    //将n个elem拷贝给本身

vector(const vector &vec);   //拷贝构造函数

    vector<int> v1;vector<int> v2(v1.begin(), v1.end());vector<char> v3(10, 'a');vector<int> v4(v1);

3.vector赋值操作:

vector& operator=(const vector& vec); //等号重载 

assign(beg, end);                                 //将beg, end之间的数据拷贝赋值给本身

assign(n, elem);                                   //将n个elem拷贝赋值给本身

    vector<int> v2;v2 = v1;vector<int> v3;v3.assign(v1.begin(), v1.end());vector<int> v4;v4.assign(10, 100);

4.vector容量和大小:

empty( );                     //判断容器是否为空

capacity( );                 //容器的容量

size( );                        //容器中元素的个数

resize(int num);          //重新指定容器的长度为num,容器变长,以默认值填充新位置,容器变                                           //短,超出的元素被删除

resize(int num, elem); //重新指定容器的长度为num,容器变长,以elem填充新位置,容器变短,                                      //超出的元素被删除

void test03()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}if (v1.empty())//为真,代表容器为空{cout << "v1为空" << endl;}else{cout << "v1不为空" << endl;cout << "v1容量为:" << v1.capacity() << endl;cout << "v1大小为:" << v1.size() << endl;}PrintVector(v1);//重新指定大小v1.resize(15);PrintVector(v1);//默认值为0    v1.resize(5);PrintVector(v1);//后面的被删掉了
}

5.vector插入和删除:

void test04()
{vector<int>v1;v1.push_back(10);v1.push_back(20);v1.push_back(30);PrintVector(v1);//10 20 30v1.pop_back();//10 20 尾部删除v1.insert(v1.begin(), 100);//100 10 20 指定位置插入v1.insert(v1.begin(), 2, 50);//50 50 100 10 20 指定位置插入v1.erase(v1.begin());//50 100 10 20 指定位置删除v1.erase(v1.begin(), v1.end()); //指定范围删除v1.clear();//清空所有数据
}

6.vector数据存取:

at(int idx);    //返回idx所指的数据

operator[ ];  //下标重载,返回idx所指的数据

front( );        //返回第一个数据

back( );        //返回最后一个数据

void test05()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}cout << v1.front() << " " << v1.at(1) << " " << v1[2] << " " << v1.back() << endl;//0 1 2 9
}

7.vector互换容器:

功能:实现两个容器内元素的互换。

swap(vec);  //将vec与本身的元素互换

v1.swap(v2);//交换两个容器的元素

用途:巧用swap可以收缩内存空间:

resize缩小空间后,只是将size减小了,capacity并没有减小,造成了空间浪费。
解决方法:

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

原理:vector<int>(v1) --- 匿名对象,按照v的size开辟大小

          .swap(v1) --- 将匿名对象和v1交换

8.vector预留空间:

功能:减少vector在动态扩展内存时的扩展次数。

reserve(int len);  //容器预留len个元素长度,预留位置不初始化,元素不可访问。

void test07()
{vector<int>v;v.reserve(100000);int num = 0;int* p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);//查看动态扩展的次数if (p != &v[0]){p = &v[0];num++;}}cout << num << endl;//1
}

http://www.lryc.cn/news/292220.html

相关文章:

  • 数据结构-内部排序
  • Qt加载网页崩溃 ASSERT:“m_adapterClient“ in file ...
  • 合约短线高胜率策略-扭转乾坤指标使用说明
  • DAY37:贪心算法738
  • 计算机中的缓存与内存
  • 2.1总结
  • 探索Pyecharts:绘制多彩日历图的艺术与技巧
  • 响应标头Allow-Headers和Expose-Headers的区别和用法
  • <网络安全>《13 上网行为管理》
  • 安全通道堵塞识别摄像机
  • 2022 年全国职业院校技能大赛高职组云计算赛项试卷
  • Android开发中,Vue 3处理回退按键事件
  • three.js CSS3DRenderer、CSS3DSprite渲染HTML标签
  • 【BBF系列协议】TR369管理平台软件设计
  • 微信小程序 仿微信聊天界面
  • 中国社会科学院大学-新加坡社科大学 招生简章
  • js中继承的详解(一文读懂)
  • Android studio使用svg矢量图
  • 《Access Path Selectionin a Relational Database Management System》论文笔记
  • 【AI_Design】Midjourney学习笔记
  • 面试宝典之深谈JVM
  • idea配置tomcat
  • 【MyBatis】操作数据库——入门
  • 免费分享一套SpringBoot+Vue药店(药房)管理系统,帅呆了~~
  • 视频怎么加水印?分享两个简单的加水印的方法
  • Apache Commons Collection3.2.1反序列化分析(CC1)
  • MySQL入门篇(10)-聚合函数的应用
  • Vue3基本概念
  • 每日OJ题_算法_模拟①_力扣1576. 替换所有的问号
  • 杂题——试题 算法训练 区间最大和