STL学习笔记之 (二)容器 vector

本文介绍了STL中的核心组成部分,包括容器、迭代器、算法,并重点讲解了顺序容器中的vector。vector是动态数组,支持随机访问和后端插入,但中间插入效率较低。通过size()、capacity()、reserve()等方法管理内存,使用push_back()、pop_back()、insert()、erase()等操作元素。begin()、end()、rbegin()、rend()提供迭代器访问,swap()用于内容交换。

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

STL,即Standard Template Library,是C++自带的标准模板库。主要由Alexander Stepanov开发完成,现在已成为C++的一个重要组成部分和特色之处。

STL使用了模板机制,将C++编程分解为了三个相互之间独立的部分:数据类型(基本数据类型、类和结构体)、容器(数组和新的STL容器类)以及算法(Algorithm)。

按照权威介绍,STL由为5个主要的部分组成,分别是:

  • 容器(Container):能够保留并管理对象的对象
  • 迭代器(Iterator):数组指针的抽象,可以在容器上针对不同的数据类型实现相应的算法
  • 算法(Algorithm):顾名思义,就是操作流程
  • 函数对象(Function Object):主要是一些语义规则的抽象,用于自定义容器或者算法
  • 适应器(Adaptor):封装一个部件以提供另外的接口

Borland C++4.0及以上的版本支持STLMicrosoft Visual C++ 5.0及以上的版本支持STL

使用STL的部件时,需要声明命名空间std。

容器。

STL中的容器分为两类:顺序容器(Sequence Container)和关联容器(Associative Container)。

  • 顺序容器:即俗称的线性表,使用数组或者链表的形式存储和管理数据内容,STL中提供了三种基本的顺序容器:vector、list、deque。
  • 关联容器:提供了基于key的存储管理机制,元素在插入之后就是排好序的,可以很快速地进行查找,STL提供了四种类型的关联容器:set、multiset、map、multimap。其中set和map要求插入的元素是不同的,而multiset和multimap可以插入多个相同的元素。

vector。

vector采用动态数组实现,在连续的内存空间存取数据成员,可以很方便地进行随机访问和后端插入,但是对于中间插入元素的效率比较低。

使用size()可以知道vector中已经存放的元素个数,capacity()可以知道已分配内存的元素个数。由于vector是采用动态分配内存的机制,所以在实际应用中,可以根据需要使用reserve来保持固定大小(最多的元素个数),以避免反复分配内存带来的开销。empty可以用来查看vector是否为空。

可以使用[size_type n]操作符来得到给定索引对应的元素,也可以使用at(size_type n)函数来查看对应索引的元素。front()和back()分别返回vector中第一个和最后一个元素。

push_back(const T&)和pop_back()可以在最后一个位置插入或者删除元素,insert(iterator position, const T& x)和erase(iterator position)可以来插入或者删除任意位置的元素,clear()可以清空整个vector的元素。

begin()和end()分别返回指向第一个元素和最后一个元素之后位置(past-the-end)的迭代器,rbegin()和rend()分别返回反向的指向最后一个元素和第一个元素之前元素的迭代器。

swap(vector&)可以与另外的vector的内容进行交换。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值