vector和array相关api记录

根据个人习惯,认为应该多用vector容器,因为array较传统数组功能并没有更大的扩展,只是提高了操作的安全性;且array是定长容器(不能通过array<int, n> a进行初始化)

vector

vector是一个动态数组,不排序

  • 一些基本操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    1.push_back 在数组的最后添加一个数据
    2.pop_back 去掉数组的最后一个数据
    3.at **得到编号位置的数据**
    4.begin 得到数组头的指针
    5.end 得到数组的最后一个单元+1的指针
    6.front 得到数组头的引用
    7.back 得到数组的最后一个单元的引用
    8.max_size 得到vector最大可以是多大
    9.capacity 当前vector分配的大小
    10.size 当前使用数据的大小
    11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
    12.reserve 改变当前vecotr所分配空间的大小
    13.erase 删除指针指向的数据项
    14.clear 清空当前的vector
    15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
    16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
    17.empty 判断vector是否为空
    18.swap 与另一个vector交换数据
  • 将两个vector进行合并

    1
    2
    3
    4
    5
    6
    vector<int> vec1 = {...};
    vector<int> vec2 = {...};
    vector<int> vec3;

    vec3.insert(vec3.end(), vec1.begin(), vec1.end());
    vec3.insert(vec3.end(), vec2.begin(), vec2.end());

array

std::array是在C++11中才引入的,与内置数组相比,array是一种更安全、更容易使用的数组类型。与内置数组类似,array对象的大小是固定的。因此,array不支持添加和删除元素以及改变容器大小的操作。与内置数组一样,标准库array的大小也是类型的一部分。当定义一个array时,除了指定元素类型,还要指定容器大小。

array于数组的区别异同

  • 相同点

    • 均可以使用下表运算符对元素进行操作,即array针对下标运算符[]进行了重载
    • 在内存的方面都使用连续内存,即array的底层存储结构均使用数组
    • array也是一个定长容器(这与vector区别)
  • 不同点

    • array提供了更好的数据访问机制

      1
      2
      3
      4
      at  begin  end(指针,最后一个元素后的地址)
      // begin end通过++操作可以遍历数组

      front back(引用,最后一个元素)
    • array提供了更好的遍历机制

    • array提供了size()和判空的获取机制,而数组只能通过遍历或者通过额外的变量记录数组的size

    • array提供了两个容器对象的内容交换,即swap的机制

    • array提供了初始化所有成员的方法fill

    • array支持更多c++11的特性,操作更加安全