vector类(顺序表)

1.定义:

在这里插入图片描述
这里顺序表的定义需要示例化:
vector<A类型>名字
这样就定义了一个A类型的顺序表

接口

在这里插入图片描述
使用vector容器需要包含头文件(#include)

成员函数

构造成员函数

【constructor】构造函数声明
在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;
 
void test() {
	vector<int> s1;//无参构造
	vector<int> s2(5, 1);//构造并初始化5个1
	vector<int> s3(s2);//拷贝构造
	vector<int> s4(s2.begin(), s2.end());//迭代器构造(拷贝s2)
}
 
int main() {
	test();
	return 0;
}

在这里插入图片描述

vector构造时的空间大小取决于使用的构造方法。以下是几种常见的构造方法和它们的空间大小:
默认构造方法:使用无参构造函数创建的vector对象将具有默认的初始容量。这个初始容量可以根据实现而有所不同,但通常情况下是0或者一个小的默认值。
区间构造方法:通过指定一个区间来构造vector对象,例如使用两个迭代器指定的开始和结束位置。这种情况下,vector对象的空间大小将根据给定的区间大小来确定。
元素个数构造方法:通过指定一个元素的个数来构造vector对象。在这种情况下,vector对象的空间大小将与指定的元素个数相等。
拷贝构造方法:通过拷贝一个已有的vector对象来构造新的vector对象。在这种情况下,新的vector对象的空间大小将与原始vector对象的空间大小相同。
请注意,vector对象的实际内存使用可能会随着元素的添加和删除而动态变化。当vector的大小超过当前容量时,vector会自动分配更大的内存空间来容纳新的元

析构函数

在这里插入图片描述

赋值

在这里插入图片描述

2.迭代器

2.1begin()和end()重点

获取第一个数据位置的iterator/const_iterator,获取最后一个数据的下一个位置的iterator/const_iterator

2.1.1应用
2.1.1.1函数调用

在这里插入图片描述

2.1.1.2用变量接受迭代器

变量的定义:
vector::iterator it=v4.begin();
顺序表类型::迭代器类型 变量
在这里插入图片描述
优质写法:使用auto
应用:
auto it =v4.begin();

2.2rbegin()和rend()

获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的reverse_iterator

在这里插入图片描述

2.2.1应用

函数调用
在这里插入图片描述
用变量接受迭代器
同上;

3.顺序表的访问(增删查检)

3.1operator[]和at

区别是:【】使用assert来报访问是否越界的问题
at使用抛异常来执行;
抛异常
例子:
在这里插入图片描述
【】的例子
在这里插入图片描述
at的例子
在这里插入图片描述

3.2 front()

std::vector::front
reference front();
const_reference front() const;

返回值:第一个元素的引用
使用示例
在这里插入图片描述
很少用;

3.3 back()

std::vector::back
reference back();
const_reference back() const;

返回值:返回最后一个元素的引用;
使用示例
在这里插入图片描述

4.vector空间增长问题

4.1 size()和capacity()

4.1.1应用

size的应用
在这里插入图片描述
capacity的应用
在这里插入图片描述

vector的扩容机制

// 测试vector的默认扩容机制
void TestVectorExpand()
{
 size_t sz;
 vector<int> v;
 sz = v.capacity();
 cout << "making v grow:\n";
 for (int i = 0; i < 100; ++i) 
 {
 v.push_back(i);
 if (sz != v.capacity()) 
 {
 sz = v.capacity();
 cout << "capacity changed: " << sz << '\n';
 }
 }
}
vs:运行结果:vs下使用的STL基本是按照1.5倍方式扩容
making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 3
capacity changed: 4
capacity changed: 6
capacity changed: 9
capacity changed: 13
capacity changed: 19
capacity changed: 28
capacity changed: 42
capacity changed: 63
capacity changed: 94
capacity changed: 141
g++运行结果:linux下使用的STL基本是按照2倍方式扩容
making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 4
capacity changed: 8
capacity changed: 16
capacity changed: 32
capacity changed: 64
capacity changed: 128

4.2 maxsize

容器可以开的最大空间。

4.3 resize()和reserve

在这里插入图片描述
注意(易错)
reserve后使用[]q
在这里插入图片描述

4.5shrink_to_fit(缩容)

将容量(capacity)减少到size大小;
尽量少用
原因:异地缩容;在另一个空间建顺序表;

5.修饰符

5.1push_back(尾插)

5.1.1定义

在这里插入图片描述
这里push_back会自动添加size和capacity

5.1.2 应用

二叉树的前序遍历

5.2 pop_back(尾删)

使用例子:
在这里插入图片描述

5.3 Insert(指定位置插入)

std::vector::insert

在这里插入图片描述
由于参数的位置是迭代器;所以使用find()函数来实现;
在这里插入图片描述
解释:在position位置之前添加val
** 注意:这里的postion是迭代器;**

5.4 erase

在这里插入图片描述
注意这里的参数也是迭代器;

find(){这个函数可以配套前两个函数使用)

定义
在这里插入图片描述
三个参数:
起始迭代器;中止迭代器;传输的值
注意
这里的参数和返回值都是迭代器;
find ()函数的使用
find函数只有string自己写了,其他容器都是用的是算法库的中的模板版函数(这个模版函数可以被除string以外容器使用)
string容器需要自己写的原因是:string类中需要查找字符串的功能;

5.5swap()

分类:成员函数,全局函数
成员函数是浅拷贝;全局变量是两个指针的交换
在这里插入图片描述
在这里插入图片描述

5.6 clear()

清理数据(size和指针数组,不清理capacity)
如果在使用clear后还想将capacity改位0时:使用shrink_to_fit()函数将capacity改为0;
在这里插入图片描述
这里的输出不知道是12345还是1 2 3 4 5;

vector的使用

应用1

只出现一次的数字
使用异或来解题;

应用2

杨辉三角形
在这里插入图片描述

杨辉三角和二维数组的对比:
二维数组

在这里插入图片描述

杨氏三角

在这里插入图片描述
两者都可以使用下标来访问,但是两者有本质区别:前者是下标的解引用;后者则是函数的调用;
杨氏三角实现leadcode

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值