[C++STL]Vector

Elaina 发布于 2025-03-15 114 次阅读


vector的定义:

功能例子说明
定义 int 型数组vector < int > a;
vector < int > b(a);
vector < int > a(100);
vector < int > a(100,6);
默认初始化,a为空
用a定义b
a有100个值为==0==的元素
a有100个值为==6==的元素
定义 string 型数组vector < string > s(10,“hello”);
vector < string > s(t.begin(),t.end());
10个值为hello的元素
s数组对t进行复制
定义 结构体 型数组struct node{int x,y;};
vector < node > a;
a用来存坐标

基本常用操作

功能例子说明
赋值a.push_back(100)在尾部添加值为100的元素
求元素个数int size = a.size()可速度求出数组元素个数
判断是否为空bool isEmpty = a.empty();判断是否为空
打印cout << a[i] << endl;打印数组出下标为i的值
中间插入a.insert(a.begin()+i,K);在第i个元素==前面==插入K
尾部多个插入a.insert(a.end(),10,5);尾部插入10个值为5的值
删除尾部a.pop_back();删除尾部元素
删除区间a.erase(a.begin()+i,a.begin()+j);删除区间 [ i , j-1 ] 的元素
删除单个元素a.erase(a.begin()+i);删除第i个元素
调整大小a.resize(n);数组大小变为n
清空a.clear();清空数组
翻转reverse(a.begin(),a.end());用函数reverse()翻转整个数组
排序sort(a.begin(),a.end());排序,默认从小到大排

1. 创建和初始化 vector

#include <iostream>
#include <vector>

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

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

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


    return 0;
}

2. 添加元素

#include <iostream>
#include <vector>

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

    // 添加单个元素
    vec.push_back(1);
    vec.push_back(2);

    // 插入元素
    vec.insert(vec.begin(), 0); // 在开头插入 0

    return 0;
}

3. 访问元素

#include <iostream>
#include <vector>

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

    // 使用下标访问元素
    std::cout << "第一个元素: " << vec[0] << std::endl;

    // 使用 at() 方法访问元素
    std::cout << "第二个元素: " << vec.at(1) << std::endl;

    // 获取第一个和最后一个元素
    std::cout << "第一个元素: " << vec.front() << std::endl;
    std::cout << "最后一个元素: " << vec.back() << std::endl;

    return 0;
}

4. 删除元素

#include <iostream>
#include <vector>

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

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

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

    // 清空 vector
    vec.clear();

    return 0;
}

5. 大小和容量

#include <iostream>
#include <vector>

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

    // 获取大小
    std::cout << "大小: " << vec.size() << std::endl;

    // 获取容量
    std::cout << "容量: " << vec.capacity() << std::endl;

    // 检查是否为空
    std::cout << "是否为空: " << (vec.empty() ? "是" : "否") << std::endl;

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

    return 0;
}

6. 迭代器

#include <iostream>
#include <vector>

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

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

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

    return 0;
}

7、自定义排序

struct point {
    int dis;
};

// 自定义比较函数
bool compare(const point &a, const point &b) {
    return a.dis < b.dis; // 按照dis字段升序排序
}
std::sort(vec.begin(), vec.end(), compare);