C++ vector 容器详解
                           
天天向上
发布: 2025-03-29 15:12:26

原创
754 人浏览过

vector 是 C++ 标准库(STL)中最常用的 动态数组 容器,提供了自动扩展随机访问高效插入删除等功能。它是 std::vector<T> 的形式,存储 T 类型的元素。

1. vector 基本概念

  • 动态扩展vector 会根据需要自动扩展或收缩。
  • 连续存储:底层数据存储在 连续的内存块 中,支持高效的随机访问
  • 支持插入/删除:提供 push_back()pop_back() 等方法来动态操作数据。

2. 引入 vector 头文件

vector 位于 <vector> 头文件中:

#include <vector>

3. vector 的基本用法

3.1 定义与初始化

#include <iostream>
#include <vector>

int main() {
    // 定义 vector
    std::vector<int> v1;  // 空 vector
    std::vector<int> v2(5, 10);  // 5 个 10
    std::vector<int> v3 = {1, 2, 3, 4, 5};  // 列表初始化
    std::vector<int> v4(v3);  // 拷贝 v3
    std::vector<int> v5(v3.begin(), v3.begin() + 3);  // 取 v3 的前 3 个元素

    return 0;
}

3.2 向 vector 添加和删除元素

#include <iostream>
#include <vector>

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

    // 添加元素
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

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

    std::cout << "Vector 元素: ";
    for (int num : v) {
        std::cout << num << " ";
    }
    return 0;
}

输出:

Vector 元素: 10 20

3.3 访问 vector 元素

#include <iostream>
#include <vector>

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

    // 使用索引访问
    std::cout << "v[0]: " << v[0] << std::endl;

    // 使用 `at()`
    std::cout << "v.at(1): " << v.at(1) << std::endl;

    // 访问首尾元素
    std::cout << "首元素: " << v.front() << std::endl;
    std::cout << "尾元素: " << v.back() << std::endl;

    return 0;
}

输出:

v[0]: 1
v.at(1): 2
首元素: 1
尾元素: 5

注意: at() [] 更安全,因为 at() 会检查越界错误,而 [] 不会。


4. 遍历 vector

4.1 使用 for 循环

#include <iostream>
#include <vector>

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

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

4.2 使用 range-based for

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {10, 20, 30};

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

    return 0;
}

4.3 使用 iterator 迭代器

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {100, 200, 300};

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

    return 0;
}

5. 插入和删除元素

5.1 插入元素

vector 支持在任意位置插入元素:

#include <iostream>
#include <vector>

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

    v.insert(v.begin(), 0);  // 在开头插入 0
    v.insert(v.end(), 4);    // 在结尾插入 4

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

    return 0;
}

输出:

Vector: 0 1 2 3 4

5.2 删除元素

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {10, 20, 30, 40, 50};

    v.erase(v.begin() + 1);  // 删除第 2 个元素
    v.erase(v.begin(), v.begin() + 2);  // 删除前两个元素

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

    return 0;
}

输出:

Vector: 40 50

6. vector 容量和大小

#include <iostream>
#include <vector>

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

    std::cout << "大小: " << v.size() << std::endl;
    std::cout << "容量: " << v.capacity() << std::endl;

    v.reserve(10);  // 预留空间
    std::cout << "新容量: " << v.capacity() << std::endl;

    return 0;
}

capacity() 返回当前分配的存储空间,size() 返回当前元素数量。


7. vector 排序

#include <iostream>
#include <vector>
#include <algorithm>

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

    std::sort(v.begin(), v.end());  // 升序排序

    std::cout << "排序后: ";
    for (int num : v) {
        std::cout << num << " ";
    }

    return 0;
}

输出:

排序后: 1 2 3 4 5

8. vector 其他操作

方法作用
clear()清空所有元素
empty()判断 vector 是否为空
swap(v1, v2)交换两个 vector
resize(n)改变 vector 大小

9. 总结

  • vector动态数组,支持随机访问动态扩展
  • push_back() 添加元素,pop_back() 删除最后一个元素。
  • insert() 插入,erase() 删除。
  • size() 获取大小,capacity() 获取容量。
  • sort() 排序,clear() 清空。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *