Skip to content

vector

动态数组

修改数据

push_back

将元素添加到容器末尾

cpp
#include <iostream>
#include <vector>

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

    // 添加元素
    list.push_back(3);
    list.push_back(4);
    list.push_back(5);

    // 遍历
    for (int value: list) {
        std::cout << value << " ";
    }
    // 3 4 5 
}

insert

插入元素到容器中的指定位置

cpp
#include <iostream>
#include <vector>

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

    // 下标为2的位置插入数据
    list.insert(list.begin() + 2, 10);

    for (int value: list) {
        std::cout << value << " ";
    }
    // 3 4 10 5
}

插入多个数据

cpp
#include <iostream>
#include <vector>

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

    // 下标为2的位置插入多个数据
    list.insert(list.begin() + 2, {10, 11, 12});

    for (int value: list) {
        std::cout << value << " ";
    }
    // 3 4 10 11 12 5 
}

pop_back

移除容器的末元素

cpp
#include <iostream>
#include <vector>

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

    list.pop_back();

    // 遍历
    for (int value: list) {
        std::cout << value << " ";
    }
    // 3 4 
}

clear

清除内容

cpp
#include <iostream>
#include <vector>

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

    // 清除内容
    list.clear();

    // 此时,没有任何输出
    for (int value: list) {
        std::cout << value << " ";
    }
}

erase

从容器擦除指定的元素

cpp
#include <iostream>
#include <vector>

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

    // 清除内容
    list.erase(list.begin() + 1);

    for (int value: list) {
        std::cout << value << " ";
    }
    // 3 5
}

范围移除

cpp
#include <iostream>
#include <vector>

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

    // 清除内容 [0, 2)
    list.erase(list.begin(), list.begin() + 2);

    for (int value: list) {
        std::cout << value << " ";
    }
    // 5
}

访问数据

cpp
#include <iostream>
#include <vector>

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

    // 访问下标为1的元素
    std::cout << list[1] << std::endl; // 4
    std::cout << list.at(1) << std::endl; //4

    // 访问第一个元素
    std::cout << list.front() << std::endl; // 3

    // 访问最后一个元素
    std::cout << list.back() << std::endl; // 5
}

容器信息

size

返回元素数

cpp
#include <iostream>
#include <vector>

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

    std::cout << list.size() << std::endl; // 3
}

empty

检查容器是否为空

cpp
#include <iostream>
#include <vector>

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

    std::cout << list.empty() << std::endl; // 0

    list.clear();

    std::cout << list.empty() << std::endl; // 1
}

迭代数据

for-in

cpp
#include <iostream>
#include <vector>

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

    // 遍历
    for (int value: list) {
        std::cout << value << " ";
    }
    // 3 4 5
}

fori

cpp
#include <iostream>
#include <vector>

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

    for (int i = 0; i < list.size(); i++) {
        std::cout << list.at(i) << " ";
    }
    // 3 4 5
}

iterator

cpp
#include <iostream>
#include <vector>

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

    for (std::vector<int>::iterator iter = list.begin(); iter != list.end(); iter++) {
        std::cout << *iter << " ";
    }
    // 3 4 5
}

sort

默认从小到大排序

cpp
#include <iostream>
#include <vector>

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

    std::sort(list.begin(), list.end());

    for (int value: list) {
        std::cout << value << " ";
    }
    // 1 2 3 4 5 
}

自定义从大到小排序

cpp
#include <iostream>
#include <vector>

/**
* 自定义排序函数
* 返回true 交换位置
* 返回false 不交换位置
*/
bool compare(int a, int b) {
    return a > b;
}

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

    std::sort(list.begin(), list.end(), compare);

    for (int value: list) {
        std::cout << value << " ";
    }
    // 5 4 3 2 1 
}

reverse

反转vector

cpp
#include <iostream>
#include <vector>

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

    std::reverse(list.begin(), list.end());

    for (int value: list) {
        std::cout << value << " ";
    }
    // 1 5 3 4 2 
}

in

成员检查

1、std::count

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

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

    if(std::count(list.begin(), list.end(), 3)) {
        std::cout << "存在" << std::endl;
    } else {
        std::cout << "不存在" << std::endl;
    }

    // 输出: 存在
    return 0;

}

2、std::find

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

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

    if(std::find(list.begin(), list.end(), 3) != list.end()) {
        std::cout << "存在" << std::endl;
    } else {
        std::cout << "不存在" << std::endl;
    }

    // 输出: 存在
    return 0;

}

3、std::find_if

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

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

    if (std::find_if(list.begin(), list.end(), [](const int x) {
        return x == 3;
    }) != list.end()) {
        std::cout << "存在" << std::endl;
    } else {
        std::cout << "不存在" << std::endl;
    }

    // 输出: 存在
    return 0;
}

4、std::any_of

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

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

    if (std::any_of(list.begin(), list.end(), [](const int x) {
        return x == 3;
    })) {
        std::cout << "存在" << std::endl;
    } else {
        std::cout << "不存在" << std::endl;
    }

    // 输出: 存在
    return 0;
}

5、std::none_of

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

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

    if (!std::none_of(list.begin(), list.end(), [](const int x) {
        return x == 3;
    })) {
        std::cout << "存在" << std::endl;
    } else {
        std::cout << "不存在" << std::endl;
    }

    // 输出: 存在
    return 0;
}

6、std::binary_search

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

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

    if (std::binary_search(list.begin(), list.end(), 3)) {
        std::cout << "存在" << std::endl;
    } else {
        std::cout << "不存在" << std::endl;
    }
    
    // 输出: 存在
    return 0;
}

ref

https://www.runoob.com/cplusplus/cpp-libs-vector.html

https://zh.cppreference.com/w/cpp/container/vector