欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

vector

时间:2024-05-11 14:29 作者:admin 点击:
在C++标准模板库(STL)中, vector 是一种序列容器,代表动态数组。它提供数组的接口,同时管理存储空间,允许在两端快速添加和移除元素。 vector 是C++中最常用的容器之一,因为它的


在C++标准模板库(STL)中,vector 是一种序列容器,代表动态数组。它提供数组的接口,同时管理存储空间,允许在两端快速添加和移除元素。vector 是C++中最常用的容器之一,因为它的灵活性和强大的功能。

vector 定义在 <vector> 头文件中。

主要特点

  • 动态数组:可以动态地添加或移除元素。
  • 随机访问:支持随机访问迭代器,可以快速定位到任何一个元素。
  • 内存连续性:元素存储在连续的内存空间中,适合需要连续内存的算法和程序。
  • 模板化:可以存储任意类型的元素。

主要操作

  • 构造和赋值:默认构造函数复制构造函数移动构造函数赋值运算符移动赋值运算符
  • 添加元素:push_back:在容器尾部添加一个元素。pop_back:移除容器尾部的一个元素。insert:在指定位置插入一个或多个元素。
  • 移除元素:erase:移除指定位置的一个或多个元素。
  • 访问元素:front:获取容器头部元素的引用。back:获取容器尾部元素的引用。operator[]:通过索引访问任意位置的元素。
  • 大小和容量:size:返回容器中元素的数量。max_size:返回容器的最大可能大小。capacity:返回当前分配的存储空间大小。
  • 内存管理:reserve:预留足够空间以存储指定数量的元素。shrink_to_fit:请求减少已分配的存储空间以适应当前大小。
  • 交换和清空:swap:交换两个 vector 的内容。clear:移除所有元素,释放已分配的内存。

使用 std::vector 的步骤

  1. 包含头文件:使用 vector 之前需要包含 <vector> 头文件。
  2. 声明 vector 实例:指定元素类型来声明 std::vector 的实例。
  3. 初始化:可以默认构造一个空的 std::vector,或者使用花括号 {} 初始化。
  4. 执行操作:使用 push_back、pop_back、insert、erase 等方法操作向量。

示例代码

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec; // 创建一个空的vector

    // 添加元素到vector
    vec.push_back(10);
    vec.push_back(20);
    vec.insert(vec.begin() + 1, 15); // 在索引1的位置插入元素15

    // 访问和打印vector中的元素
    for (int num : vec) {
        std::cout << num << ' ';
    }
    std::cout << std::endl;

    // 移除vector尾部的元素
    vec.pop_back();

    // 再次打印vector中的元素
    for (int num : vec) {
        std::cout << num << ' ';
    }
    std::cout << std::endl;

    return 0;
}

在这个示例中,我们创建了一个 std::vector 的实例,并向其中添加了一些整数。然后,我们使用 insert 方法在特定位置插入了一个新元素,并使用迭代器遍历并输出了向量中的所有元素。接着,我们使用 pop_back 方法移除了向量尾部的元素,并再次输出了向量中的元素。

注意事项

  • std::vector 在内存分配不足时会自动增长,但这意味着可能发生多次内存分配,所以如果已知将要存储的元素数量,预先使用 reserve 是一个好的实践。
  • 由于 std::vector 支持动态内存分配,不当的使用可能导致内存泄漏,确保不丢失对动态分配的 vector 的引用。
  • std::vector 的迭代器、指针和引用在向量被修改(例如,通过插入或擦除操作)后可能会变得无效,因此需要小心处理。
  • 在多线程环境中使用 std::vector 时,需要注意线程安全问题,因为 std::vector 并不是线程安全的。

std::vector 是一个功能丰富且灵活的容器,适用于大多数需要动态数组的场景。


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%