详细讲解c++中vector及其所有接口

目录

vector

vector的初始化:

迭代器起始位置:

c++容器的容量及其内存的控制:

vector容器内容的修改:


vector

vector简介:vector是表示可变大小数组的序列容器

vector容器拥有自动扩容功能,但是不同的编译器扩容的大小不同,大多数编译器采用了二倍扩容。

vector的初始化:

一共有四种形式:

vector() 无参构造
vector(size_type n, const value_type& val = value_type()) 构造并初始化n个val
vector (const vector& x); 拷贝构造
vector (InputIterator first, InputIterator last); 使用迭代器进行初始化构造

迭代器起始位置:

Iterators:

  1. begin() 迭代器

    • vector.begin() 返回指向第一个元素的迭代器。
    • 例如,如果 v 是一个 std::vector,则 v.begin() 返回一个指向第一个 int 类型元素的迭代器。
    • 其迭代器的最后对应end()
  2. cbegin() 迭代器

    • vector.cbegin() 返回一个常量迭代器,指向第一个元素。
    • 这意味着通过 cbegin() 返回的迭代器不能用于修改元素的值。
    • 其迭代器最后对应的cend()
  3. rbegin() 迭代器

    • vector.rbegin() 返回一个逆向迭代器,指向最后一个元素。
    • 逆向迭代器允许从容器的末尾向前迭代。
    • 其迭代器的最后对应的rend()
  4. crbegin() 迭代器

    • vector.crbegin() 返回一个常量逆向迭代器,指向最后一个元素。
    • 类似于 cbegin(),这意味着它提供的是一个不能修改元素的视图。
    • 其迭代器的最后对应的crend()

c++容器的容量及其内存的控制:

  1. size():

    • 返回当前 vector 中元素的数量。
    • 示例:vector.size()
  2. max_size():

    • 返回 vector 可以容纳的最大元素数量。
    • 这个值取决于系统或编译器的限制。
    • 示例:vector.max_size()
  3. resize(size_type n, value_type val = value_type()):

    • 改变 vector 的大小为 n
    • 如果 n 大于当前大小,则用 val 进行填充新元素。
    • 如果 n 小于当前大小,则截断 vector
    • 示例:vector.resize(10) 或 vector.resize(10, 5)
  4. capacity():

    • 返回 vector 当前分配的存储容量,即可以在不重新分配存储的情况下存储的元素数量。
    • 示例:vector.capacity()
  5. empty():

    • 检查 vector 是否为空,即其大小是否为 0
    • 返回 true 表示空,返回 false 表示非空。
    • 示例:vector.empty()
  6. reserve(size_type n):

    • 请求 vector 预留足够的存储空间,以容纳至少 n 个元素,但不更改 vector 的大小。
    • 如果 n 大于当前容量,则分配额外的存储空间。
    • 示例:vector.reserve(100)
  7. shrink_to_fit():

    • 要求 vector 收缩其存储空间以适应其当前大小。
    • 这个函数不保证一定会收缩容量,但会尽量减少存储空间到当前大小所需的最小值。
    • 示例:vector.shrink_to_fit()不常用

vector容器内容的修改:

  1. assign:

    • void assign(size_type count, const T& value)
      • 将 vector 的内容设置为 count 个值为 value 的副本。
    • void assign(InputIt first, InputIt last)
      • 将 vector 的内容设置为范围 [first, last) 中的元素。
    • 示例:
      std::vector vec; vec.assign(5, 10); // 将 vec 设置为包含 5 个值为 10 的元素
  2. push_back:

    • 将元素添加到 vector 的末尾。
    • 示例:
      std::vector vec; vec.push_back(42); // 将整数 42 添加到 vec 的末尾
  3. pop_back:

    • 删除 vector 的最后一个元素。
    • 示例:
      std::vector vec = {1, 2, 3}; vec.pop_back(); // 删除最后一个元素,vec 变为 {1, 2}

  4. insert:

    • iterator insert(const_iterator pos, const T& value)
      • 在 pos 位置之前插入值为 value 的元素,并返回指向新插入元素的迭代器。
    • iterator insert(const_iterator pos, size_type count, const T& value)
      • 在 pos 位置之前插入 count 个值为 value 的元素,并返回指向第一个新插入元素的迭代器。
    • iterator insert(const_iterator pos, InputIt first, InputIt last)
      • 在 pos 位置之前插入范围 [first, last) 的元素,并返回指向第一个新插入元素的迭代器。
    • 示例:
      std::vector vec = {1, 2, 3}; auto it = vec.begin() + 1; vec.insert(it, 4); // 在第二个位置插入值为 4 的元素,vec 变为 {1, 4, 2, 3}
  5. erase:

    • iterator erase(const_iterator pos)
      • 删除 pos 位置的元素,并返回指向被删除元素之后元素的迭代器。
    • iterator erase(const_iterator first, const_iterator last)
      • 删除范围 [first, last) 内的元素,并返回指向 last 之后元素的迭代器。
    • 示例:
      std::vector vec = {1, 2, 3, 4}; auto it = vec.begin() + 2; vec.erase(it); // 删除第三个元素,vec 变为 {1, 2, 4}

  6. swap:

    • 交换两个 vector 的内容。
    • 示例:
      std::vector vec1 = {1, 2, 3}; std::vector vec2 = {4, 5}; vec1.swap(vec2); // vec1 变为 {4, 5},vec2 变为 {1, 2, 3}

  7. clear:

    • 清空 vector 的所有元素。
    • 示例:
      std::vector vec = {1, 2, 3}; vec.clear(); // 清空 vec,变为空 vector

  8. emplace:

    • iterator emplace(const_iterator pos, Args&&... args)
      • 在 pos 位置插入通过参数 args 构造的新元素,并返回指向新插入元素的迭代器。
    • 示例:
      std::vector vec = {"hello", "world"}; auto it = vec.begin() + 1; vec.emplace(it, "beautiful"); // 在第二个位置插入值为 "beautiful" 的字符串,vec 变为 {"hello", "beautiful", "world"}

  9. emplace_back:

    • 在 vector 的末尾直接构造一个新元素。
    • 示例:

      std::vector> vec; vec.emplace_back(1, "one"); // 在 vec 的末尾构造一个 pair,值为 {1, "one"}

你可能感兴趣的:(c++,开发语言,stl,容器)