#4431. vector相关函数

vector相关函数

1、vector向量:向量是一个能够存放任意类型的动态数组(元素个数可变)

函数名 函数说明
push_back(元素) 增加一个元素到向量后面
insert(位置,元素) 插入元素到向量的指定位置(地址)
insert(位置,个数n,元素) 插入n个相同的元素到指定位置
insert(位置,向量头指针 first,向量尾指针end) 将另一个向量从first位置开始到end结束(不包括end)之间的内容 插入该向量的指定位置。
erase(位置) 删除指定位置的元素
erase(开始位置,结束位置 ) 删除向量中(first,last)中元素
pop_back() 弹出(删除)向量的最后一个元素
clear() 清除向量所有元素,size()变为0
运算符[i] 取向量下标为i的元素
front() 取向量第一个元素
back() 取向量最后一个元素
begin() 返回向量头指针(迭代器),指向第一个元素
end() 返回向量尾指针,指向向量最后一个元素的下一个位置
rbegin() 反向迭代器,指向最后一个元素
rend() 反向迭代器,指向第一个元素之前的位置
size() 返回向量中实际元素的个数。
resize(大小) 重新设定向量的大小,也就是可以保存元素的个数。
max_size() 得到vector最大可以是多大。
empty() 判断向量是否为空,等价于size()为0。
swap() 交换两个同类型向量的数据。

vector相关操作

1. 创建

        1、vector创建一个空的
            vector<int> v; 
        2、创建已经有一定长度的
            vector<int> v(10);
        3、创建时将数组全部初始化为同一个值
            vector<int> v(5,10) 5个元素都为10
        4、借助其他容器初始化
            int x[5] = {10,2,4,5,6};
            vector<int> v(x,x+5);  复制普通数组

            vector<int> a(5,2);
            复制 vector数组
            vector<int> v(a.begin(),a.end()); 

        二维动态数组创建
        1、vector<int> v[5];
        2、vector<vector<int> > v(5);
        3、vector<vector<int>> a(n, vector<int>(m)); 创建n行m列

2. 输入

    利用push_back()实现输入    
    vector<int> a; //创建一个空的数组
    int x;
    for(int i=0;i<3;i++){
        cin >> x;
        a.push_back(x);  //搭配push_back
    }

    利用 下标实现输入
    vector<int> a(3); //创建一个有长度的数组
    for(int i=0;i<3;i++){
        cin >> a[i]; //利用下标
    }

特别强调,没有长度的vector不能使用下标输入

vector相关函数

1. push_back(元素)

向量尾部添加一个元素。

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

int main() {
    vector<int> v;
    v.push_back(10);  // 向vector添加元素10
    cout << "v[0]: " << v[0] << endl;  // 输出第一个元素
    return 0;
}

2. insert(位置,元素)

在指定位置插入元素。

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

int main() {
    vector<int> v = {1, 2, 3};
    v.insert(v.begin() + 1, 100);  // 在位置1插入100
    for (int x : v) {
        cout << x << " ";  // 输出向量中的所有元素
    }
    return 0;
}

3. insert(位置,个数n, 元素)

在指定位置插入多个相同的元素。

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

int main() {
    vector<int> v = {1, 2, 3};
    v.insert(v.begin() + 1, 3, 100);  // 在位置1插入3个100
    for (int x : v) {
        cout << x << " ";  // 输出向量中的所有元素
    }
    return 0;
}

4. insert(位置,向量头指针 first, 向量尾指针 end)

将一个向量的内容插入到另一个向量中。

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

int main() {
    vector<int> v1 = {1, 2, 3};
    vector<int> v2 = {100, 200};
    v1.insert(v1.begin() + 1, v2.begin(), v2.end());  // 插入v2中的元素到v1的指定位置
    for (int x : v1) {
        cout << x << " ";  // 输出v1中的所有元素
    }
    return 0;
}

5. erase(位置)

删除指定位置的元素。

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

int main() {
    vector<int> v = {1, 2, 3, 4};
    v.erase(v.begin() + 1);  // 删除第二个元素
    for (int x : v) {
        cout << x << " ";  // 输出剩余的元素
    }
    return 0;
}

6. erase(开始位置,结束位置)

删除向量中的一段元素。

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

int main() {
    vector<int> v = {1, 2, 3, 4, 5};
    v.erase(v.begin() + 1, v.begin() + 4);  // 删除从第二个到第四个元素(不包括第四个)
    for (int x : v) {
        cout << x << " ";  // 输出剩余的元素
    }
    return 0;
}

7. pop_back()

删除向量的最后一个元素。

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

int main() {
    vector<int> v = {1, 2, 3, 4};
    v.pop_back();  // 删除最后一个元素
    for (int x : v) {
        cout << x << " ";  // 输出剩余的元素
    }
    return 0;
}

8. clear()

清空向量的所有元素。

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

int main() {
    vector<int> v = {1, 2, 3, 4};
    v.clear();  // 清空向量
    cout << "向量清空后的大小: " << v.size() << endl;  // 输出清空后的大小
    return 0;
}

9. 运算符[]

访问向量中的元素。

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

int main() {
    vector<int> v = {10, 20, 30};
    cout << "v[1]: " << v[1] << endl;  // 输出第二个元素
    return 0;
}

10. front()

获取向量的第一个元素。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "第一个元素: " << v.front() << endl;  // 输出第一个元素
    return 0;
}

11. back()

获取向量的最后一个元素。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "最后一个元素: " << v.back() << endl;  // 输出最后一个元素
    return 0;
}

12. begin()

获取指向向量第一个元素的迭代器。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "第一个元素: " << *v.begin() << endl;  // 解引用迭代器输出第一个元素
    return 0;
}

13. end()

获取指向向量末尾的迭代器。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "最后一个元素: " << *(v.end() - 1) << endl;  // 解引用最后一个元素
    return 0;
}

14. rbegin()

获取反向迭代器,指向最后一个元素。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "最后一个元素使用rbegin: " << *v.rbegin() << endl;  // 输出最后一个元素
    return 0;
}

15. rend()

获取反向迭代器,指向第一个元素之前的位置。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "第一个元素之前的位置使用rend: " << *v.rend() << endl;
    return 0;
}

16. size()

返回向量中元素的个数。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "向量的元素个数: " << v.size() << endl;  // 输出元素个数
    return 0;
}

17. resize(大小)

调整向量的大小。

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

int main() {
    vector<int> v = {1, 2, 3};
    v.resize(5, 100);  // 将大小调整为5,新增的元素值为100
    for (int x : v) {
        cout << x << " ";  // 输出调整大小后的向量
    }
    return 0;
}

18. max_size()

获取向量可以容纳的最大元素个数。

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

int main() {
    vector<int> v;
    cout << "向量的最大大小: " << v.max_size() << endl;  // 输出最大大小
    return 0;
}

19. empty()

判断向量是否为空。

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

int main() {
    vector<int> v = {1, 2, 3};
    cout << "向量是否为空? " << (v.empty() ? "是" : "否") << endl;  // 输出向量是否为空
    return 0;
}

20. swap()

交换两个向量的数据。

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

int main() {
    vector<int> v1 = {1, 2, 3};
    vector<int> v2 = {4, 5, 6};
    v1.swap(v2);  // 交换v1和v2的内容
    for (int x : v1) {
        cout << x << " ";  // 输出v1的新内容
    }
    return 0;
}