C++STL-vector容器

vector容器和array容器是非常像似的,都可以理解为在普通数组的基础上,增加一些成员函数和全局函数的修改,致使功能完备。(array容器链接https://blog.csdn.net/weixin_60153204/article/details/121858096?spm=1001.2014.3001.5501

但不同的是,array容器实现的是静态数组,即容量大小需提前设定;而vector容器则实现的是一个动态数组,可以进行元素的插入与删除,此容量可变大变小。

在使用vector容器时,也需要引进<vector>头文件;

#include<vector>
using namespace std;

 创建vector容器简单语法:

vector<数据类型T>容器命名;

例:创建一个int型的vector容器;

vector<int>Box1;

此时,这个vector容器因为其中没有包含任何元素,所以没有分配其内存空间。当我们使用vector容器的功能型成员函数向容器插入或添加、删除元素时,vector会自动分配内存。

当然,我们仍然可以像创建普通数组一样对其进行初始化:

vector<int>Box2 {1,2,3,4,5,6};
Box2
123456

这样就创建了一个含有6个元素的vector容器。在此基础上,我们可以利用成员函数push_back()向其添加元素(如添加元素“7”);

Box2.push_back(7);

 

Box2
1234567

 除此之外呢,我们还可以创建指定元素个数的vector容器:

vector<int>Box3(5);

 

Box3
00000

此时,所创建的vector容器开始时就会有五个元素空间,但他们均默认值为0。

我们也可以初始化起始的默认值,比如1。

vector<int>Box3(5,1);
Box3
11111

 

 其实,()中两个参数都可以用参数来表示,因为vector容器的大小是可以随意去变化的,并不像array容器一般需要特定的常量值。

int num1=5
int num2=1
vector<int>Box3(num1,num2);

 了解了vector容器的创建和原理后,下面是vector容器的其他功能型成员函数,可以在容器中直接去使用

vector容器成员函数汇总
函数成员函数功能
begin()返回指向容器中第一个元素的迭代器。
end()返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
rbegin()返回指向最后一个元素的迭代器。
rend()返回指向第一个元素所在位置前一个位置的迭代器。
cbegin()和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
cend()和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin()和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crend()和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
size()返回实际元素个数。
max_size()返回元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。
resize()改变实际元素的个数。
capacity()返回当前容量。
empty()判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
reserve()增加容器的容量。
shrink_to_fit()将内存减少到等于当前元素实际所使用的大小。
operator[ ]重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。
at()使用经过边界检查的索引访问元素。
front()返回第一个元素的引用。
back()返回最后一个元素的引用。
data()返回指向容器中第一个元素的指针。
assign()用新元素替换原有内容。
push_back()在序列的尾部添加一个元素。
pop_back()移出序列尾部的元素。
insert()在指定的位置插入一个或多个元素。
erase()移出一个元素或一段元素。
clear()移出所有的元素,容器大小变为 0。
swap()交换两个容器的所有元素。
emplace()在指定的位置直接生成一个元素。
emplace_back()在序列尾部生成一个元素。

 注意:在C++标准库中也存在begin()和end()这两个函数,和array容器包含的begin()和end()成员函数并非完全相同,标准库提供的这两个函数的操作对象既可以是容器也可以是普通数组。当操作对象是容器时,和array容器中的功能相同;当操作对象是普通数组时,则函数返回的不再是随机访问迭代器,而是返回指针。且begin()返回指向数组的第一个元素的指针,而end()是返回数组中最后一个元素之后一个位置的指针。

 选取部分功能成员函数示例:

#include<iostream>
#include<vector>//引入vector头文件
using namespace std;

int main() {
	vector<char>Box1{ 'A','B','C' };//初始化Box1={'A','B','C'}
	Box1.push_back('D');//在Box1尾部添加'D’
	vector<char>Box2(Box1);//将Box1中所有元素拷贝到Box2中
	vector<char>Box3(begin(Box1), begin(Box1) + 2);//将Box1中前两个元素拷贝到Box3中
	cout << Box1.size() << endl;//输出Box1中的元素个数
	for (auto i = Box2.begin(); i < Box2.end(); i++) {//遍历输出Box2
		cout << *i << " ";
	}
	cout << endl;
	for (auto i = Box3.begin(); i < Box3.end(); i++) {//遍历输出Box3
		cout << *i << " ";
	}
	return 0;
}

 运行结果:

4
A B C D
A B

 

注意:其中auto关键字,可以使编译器自动甄别变量的类型,也就是根据后面的值,来自行推测前面的类型应该是什么;auto的作用就是为了简化变量初始化。

而需要注意的是,以auto声明的变量必须已经被初始化,已经涵盖有元素,否则将会报错。

因为auto只是一个占位符,并不是如模板中数据类型参数,因此也就不能用于类型转换或其他的一些操作。(以上代码,只是简单的用auto替代int)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值