C++STL感知—vector容器

vector容器

vector容器非常类似数组,也称单端数组
vector容器的迭代器支持随机访问

与数组不同:

数组是在静态空间分配,vector可以动态扩展

动态扩展原理:

重新分配空间,将原空间数据拷贝到新空间,再释放原空间

构造函数

创建vector容器
void get_vector(void)
{
    
    
    vector<int> v;    //无参构造
    for (int i = 0; i < 20; i++)
    {
    
    
        v.push_back(i);
    }
    show_vector(v);

    vector<int> v1(v);    //拷贝构造
    show_vector(v1);

    vector<int> v2(v.begin(), v.end());
    show_vector(v2);

    vector<int> v3(100, 520); //将100个520拷贝给v3容器
    show_vector(v3);
}

赋值操作

void assign_vector(void)
{
    
    
    vector<int> v;  //无参构造
    for (int i = 0; i < 20; i++)
    {
    
    
        v.push_back(i);
    }

    vector<int> v1 = v;   //直接赋值,重载了加号运算符
    show_vector(v1);

    vector<int> v2;
    v2.assign(v.begin(), v.end());  //利用assign方法赋值
    show_vector(v2);

    vector<int> v3;
    v3.assign(10, 250);
    show_vector(v3);
}

容量和大小

void vector_size(void)
{
    
    
    vector<int> v;  //无参构造
    for (int i = 0; i < 20; i++)
    {
    
    
        v.push_back(i);
    }

    if (v.empty())
    {
    
    
        cout << "vector is empty" << endl;
    }
    else
    {
    
    
        cout << "容量 = " << v.capacity() << endl;  //容量输出32
        cout << "大小 = "<< v.size() << endl;  //容量输出20
    }
    show_vector(v);

    v.resize(10);
    if (v.empty())
    {
    
    
        cout << "vector is empty" << endl;
    }
    else
    {
    
    
        cout << "容量 = " << v.capacity() << endl; //容量输出32
        cout << "大小 = "<< v.size() << endl;   //容量输出10
    }
    show_vector(v);

    v.resize(50, 10);
    show_vector(v);
}

插入和删除

push_back(ele);        //尾部插入元素ele
pop_back();            //删除最后一个元素
insert(const_iterator pos, ele);   //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count,ele); //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos);  //删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素
void insert_push_pop(void)
{
    
    
    vector<int> v;  //无参构造
    for (int i = 0; i < 20; i++)
    {
    
    
        v.push_back(i);
    }
    show_vector(v);

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

    v.insert(v.begin() + 1, 100);   //在第二元素位置插入100
    show_vector(v);

    v.insert(v.end(), 3, 520);   //在最后一个元素位置插入3个520
    show_vector(v);

    v.erase(v.end()-3, v.end());   //删除末尾的3个元素,也就是3个520
    show_vector(v);

    v.clear();      // 清空容器
    show_vector(v);
}

数据存取

直接类似数组访问:

vector[index];  //index访问的哪个元素

vector<int> v;  //无参构造
for (int i = 0; i < 20; i++)
{
    
    
    v.push_back(i);
}
cout << v[0] << endl;  //像数组一样通过下标访问

v[0] = 100;
cout << v[0] << endl;

使用at方法访问:

vector.at(int idx);  //idx访问的哪个元素

cout << v.at(1) << endl;
v.at(1) = 520;
cout << v.at(1) << endl;

获取第一个元素:

vector.front(); 

获取最后一个元素:

vector.back();

交换容器内容

vector1.swap(vector2);  //将vector1容器内容和vector2互换

利用算法排序

void vector_sort(void)
{
    
    
    vector<int> v;
    v.push_back(10);
    v.push_back(2);
    v.push_back(3);
    v.push_back(5);
    v.push_back(30);

    show_vector(v);

    sort(v.begin(), v.end());   //排序
    show_vector(v);
}

猜你喜欢

转载自blog.csdn.net/qq_36413982/article/details/107592895
今日推荐