C++ : 序列容器之Vector

序列容器之Vector

是 C++ 标准库中的一种序列容器
Vector的特征
(1)Vector和Array相同点是:都是数组、都是contiguousIterator、容器内元素种类都相同
(2)Vector和Array不同点是:Array是固定数组;Vector是动态数组,可以按需扩展数组大小
(3)vector 的存储是自动管理的,按需扩张收缩。
(4)vector 通常占用多于静态数组的空间,因为要分配更多内存以管理将来的增长
(5)vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时重分配。

创建和初始化

#include <iostream>
#include <vector>

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

    // 使用初始值创建vector
    std::vector<int> vec_with_size(5); // 创建一个包含5个元素的vector,元素值为默认值0
    std::vector<int> vec_with_values(5, 10); // 创建一个包含5个元素的vector,元素值为10

    // 使用列表初始化vector
    std::vector<int> vec_with_list = {1, 2, 3, 4, 5};

    return 0;
}

添加元素

#include <iostream>
#include <vector>

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

    // 在vector的末尾添加元素
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    // 插入元素到指定位置
    vec.insert(vec.begin() + 1, 4); // 在第二个位置插入4

    for (int val : vec) {
        std::cout << val << " "; // 输出: 1 4 2 3
    }
    std::cout << std::endl;

    return 0;
}

访问元素

#include <iostream>
#include <vector>

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

    // 使用下标访问元素
    std::cout << vec[0] << std::endl; // 输出: 1

    // 使用at()方法访问元素
    std::cout << vec.at(1) << std::endl; // 输出: 2

    // 访问第一个和最后一个元素
    std::cout << vec.front() << std::endl; // 输出: 1
    std::cout << vec.back() << std::endl; // 输出: 5

    // 获取底层数组指针
    int* data = vec.data();
    std::cout << data[2] << std::endl; // 输出: 3

    return 0;
}

遍历元素

#include <iostream>
#include <vector>

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

    // 使用范围for循环遍历
    for (int val : vec) {
        std::cout << val << " ";
    }
    std::cout << std::endl;

    // 使用传统for循环遍历
    for (size_t i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    // 使用迭代器遍历
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

删除元素

#include <iostream>
#include <vector>

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

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

    // 删除指定位置的元素
    vec.erase(vec.begin() + 1); // 删除第二个元素

    // 删除指定范围的元素
    vec.erase(vec.begin(), vec.begin() + 2); // 删除前两个元素

    for (int val : vec) {
        std::cout << val << " "; // 可能输出: 4 5
    }
    std::cout << std::endl;

    return 0;
}

其他常用操作

#include <iostream>
#include <vector>

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

    // 获取vector的大小
    std::cout << "Size: " << vec.size() << std::endl; // 输出: Size: 5

    // 检查vector是否为空
    std::cout << "Is empty: " << std::boolalpha << vec.empty() << std::endl; // 输出: Is empty: false

    // 改变vector的大小
    vec.resize(3); // 现在vec包含3个元素

    // 清空vector
    vec.clear(); // 现在vec为空

    for (int val : vec) {
        std::cout << val << " "; // 不会输出任何东西,因为vec为空
    }
    std::cout << std::endl;

    return 0;
}

总结

定义:Vector是定义在命名空间std内的模板,是一种随机迭代器,其内存管理是一块连续分配的内存,支持动态扩展。
头文件:,在使用时需要包含此头文件。

特点:
元素连续存储,支持随机访问,访问效率与数组相同。
动态大小管理,容器大小可以自动调整。
分配额外的空间以适应可能的增长,避免频繁的内存重新分配。

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

li星野

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

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

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

打赏作者

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

抵扣说明:

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

余额充值