既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
🔥前言
上一次分享的是
string
容器的概念、基本使用和常用方法,在这之后我们来学习一个算法题中C++语言最火的一个容器——vector
,学习vector容器的底层概念并且会使用构造和他的的常用方法,让我们深入了解vector容器然后刷些C++算法题充实自己吧!
文章目录
vector容器的概念模型
vector容器是一个单端数组(一般默认前端是封闭的)
- 示意图
vector和数组的区别
- 普通数组是静态空间,而vector可以进行动态扩展
- 动态扩展过程
并不是直接在原有空间中进行扩容,而是找到一个
更大
的空间,将原有数据拷贝
到大空间内,并释放
原有的空间
- vector容器的迭代器是支持
随机访问
的迭代器(功能强大)- 常用迭代器
- 常用迭代器
v.begin()
和v.end()
分别代表容器的第一个元素和最后一个元素的下一个位置;v.rbegin()
和v.rend()
则分别代表最后一个元素和第一个元素前面的位置;insert()
用来把元素插入到容器内
vector容器的基本操作
包括构造方法、赋值、计算容量和大小、插入删除等
构造函数
- 创建vector容器的方法
函数原型:
vector<T> v;
其中T是泛型,用来存放数据类型,这是默认构造函数,较为常用vector(v.begin(),viend());
将[v.begin(),v.end)前闭后开的区间内的元素拷贝给本身容器vector(n,elem);
构造函数将n个elem值拷贝给本身容器vector(const vector &ans);
拷贝构造函数
代码示例:
void printVector(vector<int>& v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << \*it << " ";
}
cout << endl;
}
//vector容器构造
void test()
{
vector<int>v1;//默认构造 无参构造
for (int i = 0; i < 6; i++)
{
v1.push\_back(i);
}
printVector(v1);
//通过区间的方式进行构造
vector<int>v2(v1.begin(), v1.end());
printVector(v2);
//n个elem方式构造
vector<int>v3(6, 666);//6个666
printVector(v3);
//拷贝构造
vector<int>v4(v3);
printVector(v4);
}
tips:建议使用1、4两种构造函数
赋值操作
- 给vector容器赋值
函数原型:
vector& operator=(const vector &ans);
重载赋值操作符assign(be,en);
将[be,en)区间内的数组拷贝赋值给自己assign(n,elem);
将n个elem拷贝赋值给自己
代码示例:
//vector赋值
void PrintVector(vector<int>& v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << \*it << " ";
}
cout << endl;
}
void test()
{
vector<int>v1;
for (int i = 0; i < 10;i++)
{
v1.push\_back(i);
}
PrintVector(v1);
//赋值 operator=
vector<int>v2;
v2 = v1;
PrintVector(v2);
//assign
vector<int>v3;
v3.assign(v1.begin(), v1.end());//闭 开
PrintVector(v3);
//n个elem方式赋值
vector<int>v4;
v4.assign(6, 66);//6个66
PrintVector(v4);
}
tips:vector赋值操作简单,直接使用等号和使用assign都可以
容量和大小
- 对vector容器的容量和大小操作
函数原型:
empty();
判断容器是否为空capacity();
容器中的容量大小size();
返回容器中元素的个数resize(int sum);
重新指定容器长度为num,容器变长以默认值填充,容器变短则超出部分删除resize(int num,elem)
同上,区别是默认值填充变为elem值填充
代码示例:
void test()
{
vector<int>v1;
for (int i = 0; i < 10; i++)
{
v1.push\_back(i);
}
if (v1.empty())
{
cout << "空" << endl;
}
else
{
cout << "不空" << endl;
}
cout << "v1的容量=" << v1.capacity() << endl;
cout << "v1的大小=" << v1.size() << endl;
//重新指定大小
v1.resize(10,666);//利用重载版本,可以指定默认填充值
v1.resize(5);
}
插入和删除
- 对vector容器进行插入、删除操作
函数原型:
push_back(e);
尾部插入元素epop_back();
删除最后一个元素insert(const_iterator pos,e);
迭代器指向位置pos插入指定元素einsert(const_iterator pos,int count ,e);
插入count个指定元素eerase(const_iterator pos);
删除迭代器指向的元素erase(const_iterator begin,const_iterator end);
删除迭代器从begin到end之间的元素clear();
清空容器内所有元素
代码示例:
void PrintVector(vector<int>& v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << \*it << " ";
}
cout << endl;
}
void test()
{
vector<int>v1;
//尾插法
v1.push\_back(10);
v1.push\_back(20);
v1.push\_back(50);
//遍历
PrintVector(v1);
//尾删
v1.pop\_back();
PrintVector(v1);
//插入
v1.insert(v1.begin(), 66);
PrintVector(v1);
v1.insert(v1.begin(), 2, 666);
![img](https://img-blog.csdnimg.cn/img_convert/d44d7a566759ed3b1f3b84de7549624e.png)
![img](https://img-blog.csdnimg.cn/img_convert/2cf88fd4871402d3f84cd2355d4e8c06.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
6);
[外链图片转存中...(img-v2ZcS41F-1715893109572)]
[外链图片转存中...(img-LPezYlBp-1715893109573)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**