C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小

目录

文章目录

1 vector基本概念

2 vector构造函数

3 vector赋值操作

4 vector容量和大小



1 vector基本概念

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

vector与普通数组区别: 数组是静态空间,而vector可以动态扩展。数组在初始化时,一旦分配了内存就不能再扩展了,但是vector却可以。例如,数组arr[5],就只能存放5个数据,不能再次扩展。vector一开始指定了5个容量,如果想再加新数据的话,还可以再次动态扩展容量。

动态扩展: 并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。也就是说,vector的动态扩展是找一个内存更大的新空间并拷贝原数据,再释放原内存空间。

vector容器的迭代器是支持随机访问的迭代器

可以看到vector是左闭右开的容器,常用的迭代器是v. begin() 和v.end(),前者指向第一个元素,后者指向最后一个元素的下一个位置。vector容器还封装了很多对外接口,比如插值insert()、尾插法push_back()、尾删法pop_back()等等。

2 vector构造函数

功能描述:创建vector 容器

函数原型:

vector<T> v; ——————————采用模板实现类实现,默认构造函数
vector(v.begin(), v.end()); ————–将v [ begin(), end() ) 区间中的元素拷贝给本身,注意拷贝的元素是左闭右开区间。
vector(n, elem);—————————构造函数将n个elem拷贝给本身。
vector(const vector &vec);—————拷贝构造函数。
代码示例:

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

//vector容器构造
void test1()
{
    vector<int> v1;//默认构造 无参构造
    for (int i = 0; i < 10; ++i)
    {
        v1.push_back(i);
    }
    cout << "v1:"; printVector(v1); cout << endl;

    vector<int> v2(v1.begin(), v1.end());//将v [ begin(), end() ) 区间中的元素拷贝给本身
    cout << "v2:"; printVector(v2); cout << endl;

    vector<int> v3(10, 6);//构造函数将n个elem拷贝给本身 10个6
    cout << "v3:"; printVector(v3); cout << endl;

    vector<int> v4(v3);//拷贝构造函数
    cout << "v4:"; printVector(v4); cout << endl;
}

总结: vector的多种构造方式没有可比性,灵活使用即可

3 vector赋值操作


功能描述: 给vector容器进行赋值

函数原型:

vector& operator=(const vector &vec);————-重载等号操作符
assign(beg, end);————————————将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);————————————-将n个elem拷贝赋值给本身。
代码示例:

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

//vector容器构造
void test1()
{
    vector<int> v1;//默认构造 无参构造
    for (int i = 0; i < 10; ++i)
    {
        v1.push_back(i);
    }
    cout << "v1:"; printVector(v1); cout << endl;

    //赋值 operator=
    vector<int> v2;
    v2 = v1;//重载等号= 操作符
    cout << "v2:"; printVector(v2); cout << endl;

    //赋值 assign 这不是构造 是赋值
    vector<int> v3;
    v3.assign(v1.begin(), v1.end());//将[beg, end)区间中的数据拷贝赋值给本身。
    cout << "v3:"; printVector(v3); cout << endl;

    //赋值 assign 这不是构造 是赋值
    vector<int> v4;
    v4.assign(10, 100);//将n个elem拷贝赋值给本身。
    cout << "v4:"; printVector(v4); cout << endl;
}

总结: vector赋值方式比较简单,使用operator=,或者assign都可以

4 vector容量和大小


功能描述: 对vector容器的容量和大小操作

函数原型:

empty(); ————————–判断容器是否为空,空返回true,不为空返回false

capacity();————————容器的容量,capacity≥size

size();—————————–返回容器中元素的个数,capacity≥size

resize(int num);——————重新指定容器的长度为num,若容器变长,则以默认值0填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

resize(int num, elem);————重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除

代码示例:

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

//vector容器构造
void test1()
{
    vector<int> v1;//默认构造 无参构造
    for (int i = 0; i < 10; ++i)
    {
        v1.push_back(i+1);
    }
    cout << "v1:"; printVector(v1);

    if (v1.empty())
    {
        cout << "容器为空!" << endl;
    }
    else
    {
        cout << "容器不为空!" << endl;
        cout << "容器的容量为:" << v1.capacity() << endl;
        cout << "容器的大小为:" << v1.size() << endl;
    }
    cout << string(50, '-') << endl;

    //重新指定大小  比原来长
    v1.resize(12);//默认值0 填充
    cout << "v1:"; printVector(v1); cout << endl;
    cout << string(50, '-') << endl;

    v1.resize(15, 1);//指定值1 填充
    cout << "v1:"; printVector(v1); cout << endl;
    cout << string(50, '-') << endl;

    //重新指定大小  比原来短
    v1.resize(10);//把超出的部分删除
    cout << "v1:"; printVector(v1); cout << endl;
    cout << string(50, '-') << endl;
}

总结:

判断是否为空 — empty
返回元素个数 — size
返回容器容量 — capacity
重新指定大小 — resize
————————————————
版权声明:本文为CSDN博主「虚假自律就会真自律!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/UUUUU22/article/details/129461590

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值