华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 904|回复: 0
打印 上一主题 下一主题

C++:标准模板库vector

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-8-11 09:22:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
介绍
vector是C++标准模板库,是一个容器,可以理解为动态数组。
命名空间为std,所属头文件为<vector>   注意:不是<vector.h>
vector存储数据时,会分配一个存储空间,如果继续存储,该分配的空间已满,就会分配一块更大的内存,把原来的数据复制过来,继续存储,这些性能也会一定程度上会有损耗。

vector常用方法
1.容量
a.vector大小:vector.size()
b.vector所占内存实际大小:vector.capacity()

2.修改
a.尾部添加元素:vector.push_back()
b.尾部删除元素:vector.pop_back()
c.交换两个vector元素:vector.swap()
d.清空vector元素:vector.clear()

3.迭代器
a.vector开始指针:vector.begin()
b.vector尾部指针:vector.end()

4.访问元素
a.下标访问:vector[1]  //不检查是否越界
b.at方法访问:vector.at(1) //自动检查是否越界,如越界会抛出异常
c.访问第一个元素:vector.front()
d.访问最后一个元素:vector.back()

vector存储
简单存储
        //存储方式1
        vector<int> v1(10);
        for (int i=0; i<10; i++)
        {
                v1[i] = i;
        }
        //存储方式2
        vector<int> v2;
        for (int i=0; i<10; i++)
        {
                v2.push_back(i);
        }
存储结构体和结构体指针

        struct Student
        {
                char name[32];
                int  age;
        };

        //存储结构体
        vector<Student> vStu1;
        for (int i=0; i<10; i++)
        {
                Student stu;
                strcpy(stu.name, "wangpengfei");
                stu.age = 30 + i;
                vStu1.push_back(stu);
        }
        //存储结构体指针
        vector<Student*> vStu2;
        for (int i=0; i<10; i++)
        {
                Student* pStu = (Student*)malloc(sizeof(Student));
                strcpy(pStu->name, "wangpengfei");
                pStu->age = 30 + i;
                vStu2.push_back(pStu);
        }
vector遍历
        vector<int> v;
        for (int i=0; i<100; i++)
        {
                v.push_back(i);
        }
        //遍历方式1
        for (int i=0; i<100; i++)
        {
                int& a = v[i];
                printf("%d ", a);
        }
        //遍历方式2
        for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
                int&a = *it;
                printf("%d ", a);
        }
vector释放内存
存放整形vector释放
        //存放整型
        vector<int> v;
        for (int i=0; i<100; i++)
        {
                v.push_back(i);
        }
        //释放内存
        vector<int> (v).swap(v);

存放结构体vector释放
        //存储结构体
        vector<Student> vStu1;
        for (int i=0; i<10; i++)
        {
                Student stu;
                strcpy(stu.name, "wangpengfei");
                stu.age = 30 + i;
                vStu1.push_back(stu);
        }
        //释放内存
        vector<Student> (vStu1).swap(vStu1);

存放结构体指针vector释放
        //存储结构体指针
        vector<Student*> vStu2;
        for (int i=0; i<10; i++)
        {
                Student* pStu = (Student*)malloc(sizeof(Student));
                strcpy(pStu->name, "wangpengfei");
                pStu->age = 30 + i;
                vStu2.push_back(pStu);
        }
        //释放内存
        for (vector<Student*>::iterator it = vStu2.begin(); it != vStu2.end(); it++)
        {
                if (NULL != *it)
                {
                        delete *it;
                        *it = NULL;
                }
        }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 16:25 , Processed in 0.139423 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表