#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector<int> a({1, 2, 3});
    
    
    // front函数返回vector的第一个元素,等价于*a.begin() 和 a[0]
    // back函数返回vector的最后一个元素,等价于*a.end() 和a[a.size() - 1]
    cout << a.front() << ' ' << a[0] << ' ' << *a.begin() << endl;
    cout << a.back() << ' ' << a[a.size() - 1] << ' ' << *(a.end() - 1) << endl;
    //这里注意end指最后一个元素的后一个位置
    
    //vector还有两个特别重要的函数 叫做push_back()和pop_back()这里下划线bug了
    a.push_back(4);//指的是往a的最后一个位置添加一个元素 时间复杂度是O(1)的
    
    
    a.pop_back();//指删除最后一个元素
    a.pop_back();//指删除最后一个元素
    for(int x : a) cout << x << ' ';
    
    cout << endl;
    
    //vector 是如何实现动态增长空间的呢
    //vector是基于一个叫做倍增的思想 开一个10不够11开一个20不够21开一个40然后把前面的赋值过来
    //他的这个效率平均是普通数组的一半 因为他会多拷贝一遍数组 所以vector一般会比定义一个数组慢一些 大概慢一倍的样子
    return 0;
}