C++ STL容器之vector

版权声明:本文为博主原创文章,博客地址:https://blog.csdn.net/qq_41855420,未经博主允许不得转载。 https://blog.csdn.net/qq_41855420/article/details/89764607

C++ vector容器

定义于头文件 <vector> 之中,申明 template< class T, class Allocator = std::allocator<T> > class vector;

vector 的存储是自动管理的,按需扩张收缩。 vector 通常占用多于静态数组的空间,因为要分配更多内存以管理将来的增长。 vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时重分配。分配的内存总量可用 capacity() 函数查询。额外内存可通过对 shrink_to_fit() 的调用返回给系统。 (C++11 起)

重分配通常是性能上有开销的操作。若元素数量已知,则 reserve() 函数可用于消除重分配。

vector 上的常见操作复杂度(效率)如下:

随机访问——常数 O(1)
在末尾插入或移除元素——均摊常数 O(1)
插入或移除元素——与到 vector 结尾的距离成线性 O(n)

std::vector (对于 bool 以外的 T )满足容器 (Container) 、具分配器容器 (AllocatorAwareContainer) 、顺序容器 (SequenceContainer) 、相接容器 (ContiguousContainer) (C++17 起)及可逆容器 (ReversibleContainer) 的要求。

模板参数

T - 元素的类型。

  1. T 必须满足可拷贝赋值 (CopyAssignable) 和可拷贝构造 (CopyConstructible) 的要求。 (C++11
    前)
  2. 加诸元素的要求依赖于容器上进行的实际操作。泛言之,要求元素类型是完整类型并满足可擦除 (Erasable)
    的要求,但许多成员函数附带了更严格的要求。 (C++11 起)(C++17 前)
  3. 加诸元素的要求依赖于容器上进行的实际操作。泛言之,要求元素类型满足可擦除 (Erasable)
    的要求,但许多成员函数附带了更严格的要求。若分配器满足分配器完整性要求,则容器(但非其成员)能以不完整元素类型实例化。 (C++17
    起)

特化
标准库提供 std::vector 对类型 bool 的特化,它可能为空间效率优化。
在这里插入图片描述
成员类型

成员类型 定义
value_type T
allocator_type Allocator
size_type 无符号整数类型(通常是 std::size_t
difference_type 有符号整数类型(通常是 std::ptrdiff_t )
reference Allocator::reference (C++11 前) value_type& (C++11 起)
const_reference Allocator::const_reference (C++11 前) const value_type& (C++11 起)
pointer Allocator::pointer (C++11 前) std::allocator_traits::pointer (C++11 起)
const_pointer Allocator::const_pointer (C++11 前) std::allocator_traits::const_pointer (C++11 起)
iterator 随机访问迭代器 (LegacyRandomAccessIterator)
const_iterator 常随机访问迭代器
reverse_iterator std::reverse_iterator
const_reverse_iterator std::reverse_iterator<const_iterator>

成员函数

(构造函数) 构造 vector (公开成员函数)
(析构函数) 析构 vector (公开成员函数)
operator= 赋值给容器 (公开成员函数)
assign 将值赋给容器 (公开成员函数)
get_allocator 返回相关的分配器 (公开成员函数)

元素访问

at 访问指定的元素,同时进行越界检查 (公开成员函数)
operator[] 访问指定的元素 (公开成员函数)
front 访问第一个元素 (公开成员函数)
back 访问最后一个元素 (公开成员函数)
data 返回指向内存中数组第一个元素的指针 (公开成员函数)

迭代器

begin、cbegin 返回指向容器第一个元素的迭代器 (公开成员函数)
end、cend 返回指向容器尾端的迭代器 (公开成员函数)
rbegin、crbegin 返回指向容器最后元素的逆向迭代器 (公开成员函数)
rend、crend 返回指向前端的逆向迭代器 (公开成员函数)

容量

empty 检查容器是否为空 (公开成员函数)
size 返回容纳的元素数 (公开成员函数)
max_size 返回可容纳的最大元素数 (公开成员函数)
reserve 预留存储空间 (公开成员函数)
capacity 返回当前存储空间能够容纳的元素数 (公开成员函数)
shrink_to_fit 通过释放未使用的内存减少内存的使用 (公开成员函数)

修改器

clear 清除内容 (公开成员函数)
insert 插入元素 (公开成员函数)
emplace 原位构造元素 (公开成员函数)
erase 擦除元素 (公开成员函数)
push_back 将元素添加到容器末尾 (公开成员函数)
emplace_back 在容器末尾就地构造元素 (公开成员函数)
pop_back 移除末元素 (公开成员函数)
resize 改变容器中可存储元素的个数 (公开成员函数)

示例

#include <iostream>
#include <vector>
 
int main() {
    // 创建含有整数的 vector
    std::vector<int> v = {7, 5, 16, 8};
    // 添加二个整数到 vector
    v.push_back(25);
    v.push_back(13);
    // 迭代并打印 vector 的值
    for(int n : v) {
        std::cout << n << '\n';
    }
    return 0;
}

输出:

7
5
16
8
25
13

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/89764607