C++ 面试题 目录

C++ 中 vector 的特点和用法

推荐答案

-- -------------------- ---- -------
-------- --------
-------- ----------

--- ------ -
    -- ------ ------
    ---------------- ----

    -- - ------ -----
    ------------------
    ------------------
    ------------------

    -- -- ------ ----
    --------- -- ------ -------- - -- ------ -- ----------
    --------- -- ------- -------- - -- --------- -- ----------

    -- -- ------
    --- ---- - - -- - - ----------- ---- -
        --------- -- ------ -- - --
    -
    --------- -- ----------

    -- ------- ------
    --- ----- -- - ------------ -- -- ---------- ----- -
        --------- -- --- -- - --
    -
    --------- -- ----------

    -- --------
    ---------------

    -- -- ------ ---
    --------- -- ------- ----- - -- ---------- -- ----------

    -- -- ------ ----
    -- ------------- -
        --------- -- ------- -- ------ -- ----------
    - ---- -
        --------- -- ------- -- --- ------ -- ----------
    -

    ------ --
-

本题详细解读

1. std::vector 的特点

  • 动态数组std::vector 是 C++ 标准库中的一个动态数组容器,能够自动管理内存,支持动态扩展和收缩。
  • 连续存储std::vector 中的元素在内存中是连续存储的,因此可以通过指针算术来访问元素。
  • 随机访问std::vector 支持通过下标([]at())快速访问任意位置的元素,时间复杂度为 O(1)。
  • 自动扩容:当 std::vector 的容量不足以容纳新元素时,它会自动分配更大的内存空间,并将原有元素复制到新空间。
  • 丰富的成员函数std::vector 提供了多种成员函数,如 push_back()pop_back()size()empty() 等,方便操作和管理元素。

2. std::vector 的常用操作

  • 创建 std::vector

  • 添加元素

  • 访问元素

  • 遍历 std::vector

  • 删除元素

  • 获取大小和容量

  • 清空 std::vector

3. 注意事项

  • 内存管理:虽然 std::vector 会自动管理内存,但在频繁插入和删除操作时,可能会导致多次内存重新分配,影响性能。可以通过 reserve() 方法预先分配足够的内存来优化性能。
  • 边界检查:使用 at() 方法访问元素时,如果下标越界,会抛出 std::out_of_range 异常,而使用 [] 操作符则不会进行边界检查。
  • 迭代器失效:在 std::vector 中进行插入或删除操作时,可能会导致迭代器失效,需要特别注意。
纠错
反馈