C++数据结构——Vector

Vector 是 C++ 标准模板库 (STL) 中最常用的容器之一,它本质上是一个动态数组,能够存储相同类型的元素,并可以根据需要自动调整大小。本文将详细介绍 vector 的常用函数及其使用方法。

一、Vector 的创建与初始化

1. 包含头文件

使用 vector 前,需要包含头文件 <vector>

#include <vector>

2. 创建 vector 对象

  • 空 vector: 创建一个不包含任何元素的 vector。
std::vector<int> myVector;//创建一个 int 类型的空 vector
  • 指定大小: 创建一个包含 n 个元素的 vector,默认值为 0。
std::vector<int> myVector(10); // 创建包含 10 个元素的 vector
  • 指定大小和初始值: 创建一个包含 n 个元素的 vector,并将每个元素初始化为 value。
std::vector<int> myVector(10, 5); // 创建包含 10 个元素的 vector,每个元素初始化为 5
  • 使用列表初始化: 使用花括号 {} 直接初始化 vector。
std::vector<int> myVector = {1, 2, 3, 4, 5};
  • 拷贝构造: 使用另一个 vector 初始化新的 vector。
std::vector<int> myVector1 = {1, 2, 3};
std::vector<int> myVector2(myVector1); // 使用 myVector1 初始化 myVector2
  • 多维数组: 用 vector 来存储 vector。
std::vector<vector<int>> myVector(line, vector<int>(column, 0));// 定义一个 line 行 column 列的 vector

二、Vector 的常用函数

1. 访问元素

  • 使用下标运算符 []: 访问指定位置的元素,不进行越界检查。
int firstElement = myVector[0]; // 访问第一个元素
  • 使用 at() 函数: 访问指定位置的元素,进行越界检查,越界时抛出 std::out_of_range 异常。
int secondElement = myVector.at(1); // 访问第二个元素
  • 使用 front()back() 函数: 分别访问第一个和最后一个元素。
int firstElement = myVector.front();
int lastElement = myVector.back();

2. 修改元素

  • 使用下标运算符 []: 修改指定位置的元素。
myVector[0] = 10; // 修改第一个元素为 10
  • 使用 at() 函数: 修改指定位置的元素。
myVector.at(1) = 20; // 修改第二个元素为 20
  • 使用 assign() 函数: 将 vector 的内容替换为指定值或另一个 vector 的内容。
myVector.assign(5, 100); // 将 vector 的内容替换为 5 个 100
myVector.assign(myVector2.begin(), myVector2.end()); // 将 myVector 的内容替换为 myVector2 的内容

3. 添加元素

  • 使用 push_back() 函数: 在 vector 的末尾添加一个元素。
myVector.push_back(6); // 在末尾添加元素 6
  • 使用 insert() 函数: 在指定位置插入一个或多个元素。
myVector.insert(myVector.begin() + 2, 7); // 在第三个位置插入元素 7
myVector.insert(myVector.end(), {8, 9, 10}); // 在末尾插入元素 8, 9, 10

4. 删除元素

  • 使用 pop_back() 函数: 删除 vector 的最后一个元素。
myVector.pop_back(); // 删除最后一个元素
  • 使用 erase() 函数: 删除指定位置或范围内的元素。
myVector.erase(myVector.begin() + 2); // 删除第三个元素
myVector.erase(myVector.begin(), myVector.begin() + 3); // 删除前三个元素
  • 使用 clear() 函数: 删除 vector 中的所有元素。
myVector.clear(); // 删除所有元素

5. 获取 vector 信息

  • 使用 size() 函数: 获取 vector 中元素的个数。
int size = myVector.size();
  • 使用 capacity() 函数: 获取 vector 当前分配的存储空间大小。
int capacity = myVector.capacity();
  • 使用 empty() 函数: 判断 vector 是否为空。
if (myVector.empty()) {
    // vector 为空
}

6. 其他操作

  • 使用 swap() 函数: 交换两个 vector 的内容。
myVector1.swap(myVector2); // 交换 myVector1 和 myVector2 的内容
  • 使用 resize() 函数: 改变 vector 的大小。
myVector.resize(15); // 将 vector 的大小改为 15,新增元素初始化为 0
myVector.resize(20, 100); // 将 vector 的大小改为 20,新增元素初始化为 100
  • 使用 reserve() 函数: 预留存储空间,避免频繁重新分配内存。
myVector.reserve(100); // 预留 100 个元素的存储空间

三、Vector 的迭代器

Vector 提供了迭代器用于遍历元素:

  • begin(): 返回指向第一个元素的迭代器。
  • end(): 返回指向最后一个元素之后位置的迭代器。
  • rbegin(): 返回指向最后一个元素的逆向迭代器。
  • rend(): 返回指向第一个元素之前位置的逆向迭代器。
for (auto it = myVector.begin(); it != myVector.end(); ++it) {
    std::cout << *it << " ";
}

四、Vector 的优势与劣势

优势:

  • 动态数组: 可以根据需要自动调整大小,无需手动管理内存。
  • 高效访问: 支持随机访问,访问任意元素的时间复杂度为 O(1)。
  • 丰富的操作: 提供了丰富的成员函数,方便进行各种操作。

劣势:

  • 插入/删除效率低: 在中间位置插入或删除元素需要移动后续元素,时间复杂度为 O(n)。
  • 内存占用: 需要额外的内存空间来存储容量信息。

五、总结

Vector 是 C++ 中非常实用的容器,它提供了动态数组的功能,并支持各种操作。掌握 vector 的用法对于编写高效、易维护的 C++ 代码至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值