#D4. STL-vector笔记

STL-vector笔记

当前没有测试数据。

1. vector(动态数组,最常用)

用途:替代普通数组,支持动态扩容,随机访问速度快,适合需要频繁读写、少中间插入删除的场景。

核心定义方式

vector的定义需指定元素类型,常见方式如下:

定义方式 说明 示例
默认构造 创建空的vector,初始大小为0 vector<int> v;
指定大小 创建含n个元素的vector,默认初始值为0 vector<int> v(5);
指定大小+初始值 创建含n个元素的vector,初始值均为val vector<int> v(5, 3);
拷贝构造 用已有的vector创建新vector vector<int> v1(5); vector<int> v2(v1);
列表初始化 用初始化列表直接赋值(C++11及以上) vector<int> v = {1,2,3};

vector常用函数

函数名 功能说明 示例
push_back(x) ★ 在容器末尾添加元素x,自动扩容 v.push_back(5);
size() ★ 返回容器中元素的个数(无符号整数,建议用int接收) int len = v.size();
empty() ★ 判断容器是否为空,返回bool值(true为空) if (v.empty()) { ... }
clear() ★ 清空容器中所有元素(size变为0,容量不变) v.clear();
erase(it) ★ 删除迭代器it指向的元素,返回下一个元素的迭代器 auto it = v.begin(); v.erase(it);
resize(n, val) 将容器大小调整为n,新增元素值为val(默认0) v.resize(5, 0); // 调整为5个元素,值都是0
operator[] ★ 像普通数组一样访问元素(下标从0开始) int x = v[2];

使用下标时需注意:

vector用下标访问的核心要求是访问的下标在有效范围内(0 ≤ 下标 < 元素个数),具体分两种场景:

  1. 提前指定初始个数(如vector<int> v(5)):
    初始就有5个元素(默认值0),可直接用v[0]v[4]访问,下标合法则不报错。
  2. 未提前指定初始个数(如vector<int> v):
    初始为空(size=0),直接用v[0]会报错;但通过push_back(x)添加元素后,可访问已添加元素的下标(如添加3个元素后,可访问v[0]-v[2])。

关键提醒:vector下标访问不做越界检查(越界会崩溃),若不确定下标合法性,建议用at()函数(越界会抛异常),或先通过size()判断。

vector的3种遍历方式


#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4, 5};  // 初始化vector
    // 1. 基于范围的for循环(C++11及以上)
    cout << "基于范围的for循环:";
    for (int num : v) {
        cout << num << " ";
    }
    cout << endl;
    // 2. 原始迭代器写法
    cout << "原始迭代器写法:";
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;
    // 3. auto的迭代器写法(C++11及以上)
    cout << "auto的迭代器写法:";
    for (auto it = v.begin(); it != v.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}