【C++篇】解密 STL 动态之魂:全面掌握 C++ vector 的高效与优雅

C++标准模板库(STL)中的vector是一个极其强大的动态数组容器,它提供了灵活的存储、方便的操作以及高效的性能。在本文中,我们将深入探讨vector的特性、常用操作、内存管理以及与其他容器的比较。

一、什么是vector

vector是一个动态大小的数组,可以在运行时增加或减少其大小。它能够自动管理内存,避免了手动分配和释放内存的麻烦。

特点:

  • 动态大小:可以在运行时调整大小。
  • 随机访问:支持常数时间的随机访问。
  • 高效的内存管理:使用连续的内存块,提升缓存友好性。

二、基本操作

1. 创建vector

我们可以通过多种方式创建vector

示例代码:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1; // 空vector
    std::vector<int> vec2(5); // 初始大小为5,元素默认初始化为0
    std::vector<int> vec3(5, 10); // 初始大小为5,所有元素初始化为10

    // 输出vector的内容
    for (const auto& val : vec3) {
        std::cout << val << " "; // 输出: 10 10 10 10 10
    }
    std::cout << std::endl;

    return 0;
}

2. 添加元素

使用push_back()方法可以在vector的末尾添加元素。

示例代码:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    // 输出vector的内容
    for (const auto& val : vec) {
        std::cout << val << " "; // 输出: 1 2 3
    }
    std::cout << std::endl;

    return 0;
}

3. 访问元素

可以使用下标运算符[]at()方法来访问元素。

示例代码:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    std::cout << "Using []: " << vec[2] << std::endl; // 输出: 3
    std::cout << "Using at(): " << vec.at(2) << std::endl; // 输出: 3

    return 0;
}

4. 删除元素

使用pop_back()方法可以删除最后一个元素,使用erase()可以删除指定位置的元素。

示例代码:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    vec.pop_back(); // 删除最后一个元素
    vec.erase(vec.begin() + 1); // 删除第二个元素

    // 输出vector的内容
    for (const auto& val : vec) {
        std::cout << val << " "; // 输出: 1 3 4
    }
    std::cout << std::endl;

    return 0;
}

三、内存管理

vector在内部使用动态数组管理内存。初始时,它会分配一定大小的内存,如果超出这个大小,会自动扩展。

1. 容量与大小

size()返回当前元素的个数,而capacity()返回当前分配的内存容量。

示例代码:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;

    std::cout << "Initial size: " << vec.size() << std::endl; // 输出: 0
    std::cout << "Initial capacity: " << vec.capacity() << std::endl; // 输出: 0

    for (int i = 0; i < 10; ++i) {
        vec.push_back(i);
        std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << std::endl;
    }

    return 0;
}

2. 重新分配内存

vector的大小超过当前容量时,内部会分配新的内存,通常是原来容量的两倍,这样可以减少频繁分配内存的开销。

四、与其他容器比较

vector与其他STL容器如listdeque相比,主要优势在于随机访问性能。list适合频繁插入和删除,而deque则在两端都能高效地进行操作。

总结

通过本文,我们深入了解了C++中的vector,包括其基本操作、内存管理和与其他容器的比较。vector作为动态数组容器,提供了强大的功能和灵活性,是C++编程中不可或缺的一部分。希望本文能够帮助你更好地掌握vector的使用!如有任何问题或讨论,欢迎在评论区留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只蜗牛儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值