编辑代码

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

#define ARR_CAPACITY 10

// 声明数组
vector<int> arr(10, 0); // 定义容量为10的arr 元素初始化为0
vector<int> tmpArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 定义一个临时数组用来重新初始化动态数组arr

void TraverseArray(vector<int> &arr); // 遍历数组
void InitArr(vector<int> &arr);
void DeleteData();
void AddData();
void GetData();
void TraverseData();
void AssignData();

int main() {
    InitArr(arr); // 0 1 2 3 4 5 6 7 8 9 
    TraverseData();
    // AssignData();
}

// 引用传递: 一维vector数组作为参数 使用vector<int> &arr
void TraverseArray(vector<int> &arr) {
    // 遍历数组
    int loopTime = arr.size(); // arr的容量 = 10
    for (int i = 0; i < loopTime; i++) {
        cout << arr[i] << " "; 
    }
    cout << endl;
}
void InitArr(vector<int> &arr) {
    // 重新初始化数组arr
    cout << "重新初始化数组arr" << endl;

    arr.resize(ARR_CAPACITY); // 初始化容量为10
    int loopTime = arr.size();
    for (int i = 0; i < loopTime; i++) {
        arr[i] = i;
    }
    TraverseArray(arr);
    cout << endl;
}
void DeleteData() {
    // 删除元素
    cout << "pop_back() erase() clear() resize() 删除元素" << endl;
    arr.pop_back(); // 删除最后一个元素
    TraverseArray(arr); // 0 1 2 3 4 5 6 7 8

    // 删除指定位置的元素
    arr.erase(arr.begin() + 2); // 删除位于索引2的元素
    TraverseArray(arr); // 0 1 3 4 5 6 7 8 
    
    arr.erase(arr.begin() + 2, arr.begin() + 6); // 删除arr索引为[2, 6)的元素
    TraverseArray(arr); // 0 1 7 8 

    arr.resize(1); // 修改vectore的容量 多余尾部的元素会被销毁
    TraverseArray(arr); // 0

    arr.clear(); // 清空元素
    TraverseArray(arr); //  
}
void AddData() {
    // 增加元素
    cout << "push_back() insert()增加元素" << endl;
    arr.push_back(11); // capacity容量翻倍 增加11到数组索引10的位置 
    TraverseArray(arr); // 0 1 2 3 4 5 6 7 8 9 11

    // 在指定位置插入元素
    arr.insert(arr.begin(), 8); // 在最前面插入8
    TraverseArray(arr); // 8 0 1 2 3 4 5 6 7 8 9 11 

    arr.insert(arr.begin() + 2, 100); // 索引2的位置变成100 其他元素后移
    TraverseArray(arr); // 8 0 100 1 2 3 4 5 6 7 8 9 11 

    arr.insert(arr.end(), 3, 1); // 在vector后面增加3个1
    TraverseArray(arr); // 8 0 100 1 2 3 4 5 6 7 8 9 11 1 1 1 

    arr.insert(arr.end(), tmpArr.begin(), tmpArr.end()); // 在arr后面添加tmpArr
    TraverseArray(arr); // 8 0 100 1 2 3 4 5 6 7 8 9 11 1 1 1 0 1 2 3 4 5 6 7 8 9 
}
void GetData() {
    // 获取指定位置的元素
    cout << "at() 获取指定位置的元素" << endl;
    cout << arr.at(3) << endl << endl;

    // 获得数组元素的指针
    cout << "begin() 和 end() 获得数组元素的指针" << endl;
    cout << *arr.begin() << " " << *(arr.begin() + 1) << " "; // 获取第一个元素的值和第二个元素的值
    cout << *arr.end() << endl << endl; // 最后一个元素的指针指向49 4113好像是会变动的

    // 获得vector元素的引用
    cout << "front() 和 back() 获取数组元素的引用" << endl;
    cout << arr.front() << " " << arr.back() << " " << endl << endl; // 0和9 获取第一个和最后一个数组元素

    // vector 实际存储的元素个数
    cout << "size() vector实际存储的元素个数" << endl;
    cout << arr.size() << endl << endl; // 10

    // vector 实际的空间大小
    cout << "capacity() vector实际的空间大小" << endl;
    cout << arr.capacity() << endl << endl;

    // vector 最大空间大小
    cout << "max_size() vector最大的空间大小" << endl;
    cout << arr.max_size() << endl << endl; // 4611686018427387903
}
void TraverseData() {
    // 遍历数组
    cout << "for 利用iterator reverse_iterator auto 遍历数组元素" << endl;

    int loopTime = arr.size(); // for循环遍历数组
    for (int i = 0; i < loopTime; i++) {
        cout << arr[i] << " "; 
    }
    cout << endl;

    // 正序遍历
    for (vector<int>::iterator iter = arr.begin(); iter != arr.end(); ++iter) {
        cout << *iter << " ";
    }
    cout << endl;

    for (auto iter = arr.cbegin(); iter != arr.end(); iter++) {
        cout << *iter << " ";
    }
    cout << endl;

    // 倒序遍历
    for (vector<int>::reverse_iterator iter = arr.rbegin(); iter != arr.rend(); iter++) {
        cout << *iter << " ";
    }
    cout << endl;

    for (auto iter = arr.crbegin(); iter != arr.crend(); iter++) {
        cout << *iter << " ";
    }
    cout << endl;

}

void AssignData() {
}