16.2.2【vertor容量和大小、插入和删除、数据存取】

 

 

#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
#include<vector>


/*
    3.2.4 vector容量和大小
        empty(); //判断容器是否为空
        capacity(); //容器的容量
        size(); //返回容器中元素的个数
        resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
        //如果容器变短,则末尾超出容器长度的元素被删除。
        resize(int num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
        //如果容器变短,则末尾超出容器长度的元素被删除

    3.2.5 vector插入和删除
        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(); //删除容器中所有元素

    3.2.6 vector数据存取
        at(int idx); //返回索引idx所指的数据
        operator[]; //返回索引idx所指的数据
        front(); //返回容器中第一个数据元素
        back(); //返回容器中最后一个数据元素
*/


void pv(vector<int> & v)
{
    for(vector<int>::iterator it=v.begin(); it!=v.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}


void test324()
{
    vector<int> v1;
    for(int i=0; i<10; i++)
    {
        v1.push_back(i);
    }
    pv(v1);

    if(v1.empty())
    {
        cout << "v1 is null" << endl;
    }
    else
    {
        cout << "v1 is not null" << endl;
        cout << "v1容量:" << v1.capacity() << endl;
        cout << "v1当前大小:" << v1.size() << endl;
    }

    //重新指定大小
    //新指定大小比原来大
    v1.resize(18); //默认用0填充空余位置
    pv(v1);
    v1.resize(20, 666); //指定用666填充空余位置
    pv(v1);
    //新指定大小比原来小
    v1.resize(5); //删除多余位置的数据
    pv(v1);
}


void test325()
{
    vector<int> v1;
    v1.push_back(10); //尾插
    v1.push_back(20);
    v1.push_back(30);
    pv(v1);

    v1.pop_back(); //尾删
    pv(v1);

    v1.insert(v1.begin(), 100); //(迭代器,待插入数据)
    pv(v1);

    v1.insert(v1.begin(), 2, 22); //(迭代器,插入个数,待插入数据)
    pv(v1);

    v1.erase(v1.begin()); //删除,参数也是迭代器
    pv(v1);

    v1.erase(v1.begin(), v1.end()); //区间删除
    pv(v1); //清空,效果同v1.clear()
}


void test326()
{
    vector<int> v1;
    for(int i=0; i<10; i++)
    {
        v1.push_back(i);
    }

    for(int i=0; i<v1.size(); i++)
    {
        cout << v1[i] << " ";
    }
    cout << endl;

    for(int i=0; i<v1.size(); i++)
    {
        cout << v1.at(i) << " ";
    }
    cout << endl;

    cout << "first data:" << v1.front() << endl;
    cout << "last data:" << v1.back() << endl;
}


int main()
{
    test324();
    /*
        判断是否为空 --- empty
        返回元素个数 --- size
        返回容器容量 --- capacity
        重新指定大小 --- resize
    */


    test325();
    /*
        尾插 --- push_back
        尾删 --- pop_back
        插入 --- insert (位置迭代器)
        删除 --- erase (位置迭代器)
        清空 --- clear
    */
    test326();
    /*
        除了用迭代器获取vector容器中元素,[ ]和at也可以
        front返回容器第一个元素
        back返回容器最后一个元素
    */


    system("pause");
    return 0;
}

posted @ 2021-04-23 14:38  yub4by  阅读(98)  评论(0编辑  收藏  举报