【vector】容器

功能:

vector数据结构和数组非常相似,也称为单端数组

vector与普通数组区别:
不同之处在于数组是静态空间,而vector可以动态扩展
动态扩展:
并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
在这里插入图片描述
vector容器的迭代器是支持随机访问的迭代器

vector构造函数

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

void printVector(vector<int> &v)
{
    for(vector<int>::iterator it = v.begin() ; it != v.end() ;it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//构造函数
void test01()
{
    vector<int> v1;                       //无参数构造
    for(int i = 0 ;i < 10 ;i++)
    {
        v1.push_back(i);
    }
    printVector(v1);

    vector<int>v2(v1.begin(),v1.end());   //构造v2时把v1的区间数据拷贝给v2
    printVector(v2);

    vector<int>v3(10,100);                //构造v3时把10个100拷贝给v3
    printVector(v3);

    vector<int>v4(v3);                    //构造v4时把v3拷贝给v4
    printVector(v4);
}
int main()
{
    test01();
    return 0;
}

vector赋值操作

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

void printVector(vector<int> &v)
{
    for(vector<int>::iterator it = v.begin() ; it != v.end() ;it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//赋值操作
void test01()
{
    vector<int>v1;
    for(int i = 0 ;i < 10 ;i++)
    {
        v1.push_back(i);
    }
    printVector(v1);

    vector<int>v2;
    v2 = v1;     //=赋值
    printVector(v2);

    vector<int>v3;
    v3.assign(v1.begin(),v1.end());    //assign赋值,区间内全拷贝过去,左闭右开区间
    printVector(v3);

    vector<int>v4;
    v4.assign(10,100);                 //assign赋值。10个100
    printVector(v4);
}
int main()
{
    test01();
    return 0;
}

vector容量和大小

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

void printVector(vector<int> &v)
{
    for(vector<int>::iterator it = v.begin() ; it != v.end() ;it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//容量和大小
void test01()
{
    vector<int>v1;
    for(int i = 0 ;i < 10 ;i++)
    {
        v1.push_back(i);
    }
    printVector(v1);

    if(v1.empty())
    {
        cout << "v1为空" << endl;
    }
    else
    {
        cout << "v1不为空" << endl;
        cout << "v1的容量为" << v1.capacity() << endl;    //默认是16?
        cout << "v1的大小为" << v1.size() << endl;
    }
    //resize重新指定大小,默认用0填充,可以替换填充值
    v1.resize(20,10);
    printVector(v1);
    cout << "v1的容量为" << v1.capacity() << endl;
    cout << "v1的大小为" << v1.size() << endl;

    //resize重新指定大小,如果变小,超出部分删除
    v1.resize(5);
    printVector(v1);
}
int main()
{
    test01();
    return 0;
}

vector插入和删除

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

void printVector(vector<int> &v)
{
    for(vector<int>::iterator it = v.begin() ; it != v.end() ;it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//插入和删除
void test01()
{
    vector<int>v1;
    //尾插
    v1.push_back(10);
    v1.push_back(20);
    v1.push_back(30);
    v1.push_back(40);
    v1.push_back(50);
    printVector(v1);
    //尾删
    v1.pop_back();
    printVector(v1);
    //插入
    v1.insert(v1.begin(),100);   //开始位置插入100
    printVector(v1);

    v1.insert(v1.begin(),2,1000); //开始位置插入2个1000
    printVector(v1);

    //清空
    v1.erase(v1.begin(),v1.end());
    v1.clear();
    printVector(v1);
}
int main()
{
    test01();
    return 0;
}

vector数据存取

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

void printVector(vector<int> &v)
{
    for(vector<int>::iterator it = v.begin() ; it != v.end() ;it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//插入和删除
void test01()
{
    vector<int>v1;
    for(int i = 0 ;i < 10 ; i++)
    {
        v1.push_back(i);
    }
    printVector(v1);

    for(unsigned int i = 0 ;i < v1.size() ;i++)
    {
        cout << v1[i] << " ";   //直接索引
    }
    cout << endl;

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

    cout << "front:" << v1.front() << endl;
    cout << "back:" << v1.back() << endl;

}
int main()
{
    test01();
    return 0;
}

vector互换容器

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

void printVector(vector<int> &v)
{
    for(vector<int>::iterator it = v.begin() ; it != v.end() ;it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//互换容器
void test01()
{
    vector<int>v1;
    for(int i = 0 ;i < 10 ; i++)
    {
        v1.push_back(i);
    }
    printVector(v1);

    vector<int>v2;
    for(int i = 10 ; i > 0 ;i--)
    {
        v2.push_back(i);
    }
    printVector(v2);

    //互换容器
    cout << "互换后:" << endl;
    v1.swap(v2);
    printVector(v1);
    printVector(v2);
}

void test02()
{
    vector<int>v;
    for(int i = 0 ;i < 10000 ;i++)
    {
        v.push_back(i);
    }

    cout << "v的容量为" << v.capacity() << endl;
    cout << "v的大小为" << v.size() <<endl;

    v.resize(3);
    cout << "v的容量为" << v.capacity() << endl;
    cout << "v的大小为" << v.size() <<endl;

    //收缩内存
    vector<int>(v).swap(v); //匿名对象
	//先利用v的大小建立一个新的匿名对象,再把两个交换,达到v的内存收缩
    cout << "v的容量为" << v.capacity() << endl;
    cout << "v的大小为" << v.size() <<endl;
}
int main()
{
    //test01();
    test02();
    return 0;
}

vector预留空间

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

void printVector(vector<int> &v)
{
    for(vector<int>::iterator it = v.begin() ; it != v.end() ;it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//预留空间
void test01()
{
    vector<int>v;

    //预留空间
    v.reserve(100000);

    int num = 0;   //统计开辟空间次数
    int *p = NULL; //标记
    for(int i = 0 ;i < 100000 ;i++)
    {
        v.push_back(i);
        if(p != &v[0]) //判断指针p是否指向数组头部,如果没有,说明开辟了空间,把p强制指向数组头部,num加1
        {
            p = & v[0];
            num ++;
        }
    }
    cout << "num : " << num << endl;
}
int main()
{
    test01();
    return 0;
}
//vector扩展是需要重新开辟空间的,所以数据量过大的话,可以预留空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值