【C++】vector(下)--下篇

在上篇中,我们讨论了C++ STL中的vector类的基本使用方法,包括如何定义、初始化和基本操作。在本篇中,我们将深入探讨vector的高级功能,包括动态扩展、内存管理、迭代器使用以及常见的应用场景。

1. 动态扩展

vector的一个重要特点是能够动态扩展其大小。当我们向vector中添加元素时,vector会自动处理内存的分配和释放。

1.1 添加元素

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

#include <iostream>
#include <vector>

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

    for (int i = 1; i <= 5; ++i) {
        numbers.push_back(i);  // 动态添加元素
    }

    std::cout << "Numbers: ";
    for (const auto& num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

1.2 扩展与缩减

当添加的元素超出当前容量时,vector会自动扩展其容量,通常是当前容量的两倍。当使用resize方法时,我们可以直接调整vector的大小。

#include <iostream>
#include <vector>

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

    numbers.resize(5);  // 扩展到5个元素
    numbers[3] = 4;
    numbers[4] = 5;

    std::cout << "Resized Numbers: ";
    for (const auto& num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

2. 内存管理

vector自动管理内存的分配和释放,但我们仍需注意内存使用的效率。

2.1 容量管理

使用capacitysize方法可以获取当前的元素个数和已分配的容量。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers;
    numbers.reserve(10);  // 提前分配10个元素的空间

    std::cout << "Capacity: " << numbers.capacity() << std::endl;
    std::cout << "Size: " << numbers.size() << std::endl;

    return 0;
}

2.2 清空与释放

使用clear方法可以清空vector中的元素,使用shrink_to_fit可以释放未使用的内存。

#include <iostream>
#include <vector>

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

    numbers.clear();  // 清空元素
    std::cout << "Size after clear: " << numbers.size() << std::endl;

    numbers.shrink_to_fit();  // 释放内存
    std::cout << "Capacity after shrink: " << numbers.capacity() << std::endl;

    return 0;
}

3. 迭代器使用

vector支持多种类型的迭代器,包括随机访问迭代器。

3.1 使用迭代器遍历

通过beginend方法,可以获取vector的迭代器,并遍历其元素。

#include <iostream>
#include <vector>

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

    std::cout << "Numbers using iterator: ";
    for (auto it = numbers.begin(); it != numbers.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

3.2 反向迭代器

使用rbeginrend方法,可以使用反向迭代器从后向前遍历。

#include <iostream>
#include <vector>

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

    std::cout << "Numbers in reverse: ";
    for (auto it = numbers.rbegin(); it != numbers.rend(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

4. 应用场景

vector广泛用于各种应用中,适合需要动态大小数组的场景,如:

  • 动态数据集合:需要频繁增加或减少元素的情况下,vector非常高效。
  • 存储计算结果:在需要存储计算结果并动态更新的算法中,vector是理想的选择。
  • 实现栈和队列:利用vector的灵活性,可以简单地实现栈(使用push_backpop_back)或队列(使用push_backerase)。

5. 总结

在本篇中,我们深入探讨了C++ STL中的vector类的动态扩展、内存管理、迭代器使用以及常见的应用场景。通过对这些高级功能的掌握,你将能够更加高效地利用vector进行各种编程任务。继续实践和深入学习,你将能够运用vector解决更复杂的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只蜗牛儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值