西嘎嘎学习 - C++vector容器 - Day 7

发布于:2025-09-09 ⋅ 阅读:(21) ⋅ 点赞:(0)

1  vector 是什么

        vector 是一个顺序容器,它内部使用连续的内存空间来存储元素。

        可以像使用数组一样访问 vector 中的元素。

        可以自动扩展大小。

2  vector 的基本用法

(1)引入头文件

#include <vector>

(2)定义 vector

std::vector<int> numbers;    // 定义一个存储 int 类型的 vector

        std::vector 是 vector 的命名空间

        int 是 vector 中存储的数据类型。

        numbers 是 vector 的变量名。

3  常用操作

(1)添加元素

numbers.push_back(10);    // 在 vector 末尾添加一个元素

(2)访问元素

int first = numbers[0];    // 使用下标访问元素(不检查越界)
int second = numbers.at(1);    // 使用 at() 方法访问元素(会检查越界)

(3)获取 vector 的大小

int size = numbers.size();    //获取当前元素个数

(4)判断是否为空

if (numbers.empty())
{
    std::cout << "Vector 是空的" << std::endl;
}

(5)清空 vector

numbers.clear();    // 清除所有元素

(6)删除最后一个元素

numbers.pop_back();    //删除最后一个元素

4  初始化 vector

(1)默认初始化(空 vector)

std::vector<int> vec1;    // 空 vector

(2)指定大小

std::vector<int> vec2(5);    //创建一个包含 5 个 0 的 vector

(3)指定大小和初始值

std::vector<int> vec3(5,10);    // 创建一个包含 5 个 10 的 vector

(4)用数组初始化

int arr[] = {1,2,3,4,5};
std::vector<int> vec4(arr,arr + 5);    // 用数组初始化 vector

5  遍历 vector

(1)使用下标遍历

for (size_t i = 0; i < vec.size(); ++i)
{
    std::cout << vec[i] << " ";
}

(2)使用迭代器遍历

for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++i)
{
    std::cout << *it << " " ;
}

(3)使用范围 for 循环 (C++ 11 及以上)

for (int num : vec)
{
    std::cout << num << " " ;
}

6  vector 的性能特点

        1.随机访问快:因为 vector 是连续内存,所以随机访问元素非常快。

        2.尾插 / 尾删 快:push_back 和 pop_back 是常数时间操作。

        3.中间插入 / 删除 慢:因为需要移动元素,时间复杂度是 O(n)。

        4.自动扩容:当 vector 容量不足时,会自动分配更大的内存空间,并复制原有元素。

7  完整示例代码

#include <iostream>
#include <vector>  // 引入 vector 头文件

int main() {
    // 1. 定义并初始化一个 vector
    // 使用初始化列表的方式创建一个包含 5 个整数的 vector
    std::vector<int> numbers = {10, 20, 30, 40, 50};

    // 2. 输出 vector 的大小和内容
    std::cout << "初始 vector 的大小是: " << numbers.size() << std::endl;
    std::cout << "初始 vector 的内容是: ";
    // 使用范围 for 循环遍历 vector
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 3. 在 vector 末尾添加元素
    // push_back() 会将元素添加到 vector 的末尾
    numbers.push_back(60);
    numbers.push_back(70);

    std::cout << "添加元素后的 vector 内容是: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 4. 修改 vector 中的某个元素
    // 使用下标访问并修改索引为 2 的元素(从 0 开始)
    numbers[2] = 99;
    std::cout << "修改后的 vector 内容是: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 5. 使用 at() 方法访问元素(带越界检查)
    // at() 会检查索引是否越界,如果越界会抛出异常
    try {
        std::cout << "使用 at() 访问第 5 个元素: " << numbers.at(5) << std::endl;
    } catch (const std::out_of_range& e) {
        // 捕获越界异常并输出错误信息
        std::cout << "越界访问错误: " << e.what() << std::endl;
    }

    // 6. 删除最后一个元素
    // pop_back() 会删除 vector 的最后一个元素
    numbers.pop_back();
    std::cout << "删除最后一个元素后的 vector 内容是: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 7. 使用迭代器遍历 vector
    // begin() 返回指向第一个元素的迭代器
    // end() 返回指向最后一个元素之后的迭代器
    std::cout << "使用迭代器遍历 vector: ";
    for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
        // *it 表示解引用迭代器,获取当前元素
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 8. 使用数组初始化 vector
    // 定义一个数组
    int arr[] = {100, 200, 300};
    // 使用数组的起始地址和结束地址初始化 vector
    std::vector<int> vecFromArr(arr, arr + 3);
    std::cout << "从数组初始化的 vector 内容是: ";
    for (int num : vecFromArr) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 9. 二维 vector(vector 的 vector)
    // 定义一个二维 vector,表示一个 3x3 的矩阵
    std::vector<std::vector<int>> matrix = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    std::cout << "二维 vector 内容是: " << std::endl;
    // 外层循环遍历每一行
    for (const auto& row : matrix) {
        // 内层循环遍历每一行中的元素
        for (int val : row) {
            std::cout << val << " ";
        }
        std::cout << std::endl;
    }

    // 10. 清空 vector
    // clear() 会删除 vector 中的所有元素
    numbers.clear();
    std::cout << "清空后的 vector 大小是: " << numbers.size() << std::endl;

    return 0;
}

8  总结

功能 说明
push_back() 在 vector 末尾添加元素
pop_back() 删除 vector 的最后一个元素
size() 获取 vector 中元素的个数
at() 安全访问元素(带越界检查)
[] 快速访问元素(不检查越界)
clear() 清空 vector 中的所有元素
empty() 判断 vector 是否为空(未在本例中使用)
begin() / end() 获取迭代器,用于遍历 vector
数组初始化 vector 使用数组指针初始化 vector
二维 vector vector 的 vector,用于表示矩阵等结构
异常处理 捕获越界访问异常
范围 for 循环 C++11 引入的简洁遍历方式


网站公告

今日签到

点亮在社区的每一天
去签到