C++vector模板类

本文详细介绍了C++ STL中的vector容器,包括其特性、操作方法和常见用法。讲解了如何创建和操作vector,如随机访问、赋值、添加元素、删除和插入等。此外,还提到了STL中的迭代器概念及其作用,以及如何使用for_each、random_shuffle和sort等函数。最后,展示了基于范围的for循环在操作vector时的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板类vector对应一个数组,并且在基本数组的基础上增加了许多功能,比如说:

  • 和正常数组一样可以使用重载的[]运算符实现随机访问。
  • 可以将一个vector对象赋值给另一个vector对象。

使用方式

要创建一个vector类对象,首先要包含头文件vector,然后声明使用,在声明时,要使用<type>来显示的指出要使用的类型,另外此模板类使用动态内存分配,因此可以使用初始化参数来指出需要多少元素。下面的示例演示了这几种方法:

可对矢量进行的操作

模板类vector属于STL容器的一种,所有STL容器都提供了一些基本方法:

方法描述
size()返回容器中的元素数目
swap()交换两个容器的内容
begin()返回指向容器第一个元素的迭代器
end()返回超尾元素的迭代器
迭代器

实际上是一个广义指针,可以是指针,也可以是一个可对其执行类似操作的对象(比如说指针递增递减,解引等)。通过迭代器的使用,令STL可为各种不同的容器提供统一的接口。

每个容器都定义了一个合适的迭代器,该迭代器的类型是一个名为iteratortypedef,作用域为整个类,比如说为某个容器声明一个迭代器,可以这样:

vector<int>::iterator it;

然后可以对迭代器进行指针一样的操作:

vector<int>arr(5);
it=arr.begin();
*it=5;
for(it++;it<arr.end();it++)
    (*it)=666;

对于C++11来讲,还可以使用auto来让编译器自己推断变量类型。

对于超尾迭代器,实际上是容器最后一个元素再后面的那个元素的迭代器。

一些某些STL容器才有的方法
方法描述
push_back()在容器尾添加元素
erase()删除参数迭代器的区间
insert()接受三个参数,第一个参数指定新元素的插入位置,第二第三使用迭代器指定插入的区间,插入到指定位置前

下面的示例演示了上面的方法:

对矢量可进行的其他操作

三个具有代表性的STL函数:

他们包含在算法头文件中:algorithm

函数描述
for_each()对迭代器区间内(参一参二)元素逐个应用特定函数对象(参三)
random_shuffle()随机排列迭代器区间(参一参二)内元素
sort()对迭代器区间(参一参二)应用特定函数(参三有默认值)进行排序

一些说明:

首先对于for_each来讲,第三个参数,也就是那个函数对象,不能够改变容器元素的值,可以使用这个函数来代替for循环,这个函数适用于所有容器类。

对于random_shuffle()函数的使用要求容器类支持随机访问。

对于sort()函数来讲,也要求容器类支持随机访问,如果不提供第三个参数那么按照存储在容器中的类型元素定义的<来进行操作,即按照升序排列。如果提供第三个参数,需要定义能够处理该类型对象的operator<()函数,返回值可以使用bool类型,true表示顺序正确,反之则不正确。

看下面的例子对上面的方法进行了实验:

基于范围的for循环

基于范围的for循环是为用于STL设计的,可以这样使用for循环:

vector<int>arr{1,2,3,4,5};
for(auto s:arr)
    cout<<s<<' ';

在这种for循环内,先声明一个与容器存储内容类型相同的变量,然后指出容器名称,最后遍历容器每一个元素。

for_each()不同,基于循环的for循环可以改变容器元素,只需要将变量声明为引用即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_南明_离火_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值