vector容器类简单示例

xiaoxiao2021-02-28  92

vector作为STL提供的标准容器之一,是经常要使用的,有很重要的地位,并且使用起来也是灰常方便。vector又被称为向量,vector可以形象的描述为长度可以动态改变的数组,功能和数组较为相似。实际上更专业的描述为:vector是一个多功能的,能够操作多种数据结构和算法的模板类和函数库,vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 那么vector和数组的主要区别 数组:分配的是静态空间,一般分配了就不可以改变,就像我们熟知的定义了一个数组,那么数组的长度就不可以改变了,我们也不可以进行越界访问,但是编译器不检查越界,这一点在我们编程的时候要尤为注意(很多都可能会烦这样的错误!!)。一般申请的数组长度不能满足我们的要求了,我们要重新申请大一点数组,然后把原数组中数据复制过来。 vector:分配的是动态空间,即:我们发现在声明vector容器的时候也可以不指定容器的大小,vector是随着元素的加入,空间自动扩展的。但是,我们必须要负责任的肯定vector分配的空间是连续的,也就是支持数组中的下标随机访问,实际上vector的实现机制是:预留一部分空间,而且预留空间的大小是按一定比率增长的,如果空间不够用的话,要保证连续,就必须重新new一片空间,然后将原有元素移动到新空间,同时预留新的空间(并且新分配的空间比原来分配的空间),最后将原来的那部分空间释放掉。这样预留空间的好处就是不用每次向vector中加元素都重新分配空间。

#include <iostream> #include<vector> using namespace std; int main() { int a[] = {2,3,4}; vector<int> v1; vector<int>::iterator iter; //插入元素 v1.insert(v1.begin(),2,1);//从下标为0开始插入两个1,结果为 1 1 v1.insert(v1.begin(), a, a + 3);//从下标为0开始插入从a[0]到a[3]前面的元素,即插入a[0],a[1],a[2],结果为2 3 4 1 1 cout << "容量为:" << v1.capacity() << endl; cout << "长度为:" << v1.size() << endl; v1.insert(v1.begin()+5,2,5);//从下标为5开始插入两个5,结果为2 3 4 1 1 5 5 v1.push_back(0);//尾插 cout << "data: "; for (iter = v1.begin(); iter != v1.end(); ++iter) cout << *iter << " "; cout << endl <<"容量为:"<<v1.capacity()<< endl;//2 3 4 1 1 5 5 0 cout << "长度为:" << v1.size() << endl; //删除元素 v1.erase(v1.begin(),v1.begin()+2);//删去下标为0,1的,也就是删去2,3.剩下为4 1 1 5 5 0 v1.erase(v1.begin()+1);//删去下标为1的,也就是删去1,剩下为4 1 5 5 0 v1.pop_back();//尾删 结果为4 1 5 5 cout << "data: "; for (iter = v1.begin(); iter != v1.end(); ++iter) cout << *iter << " "; cout << endl << "容量为:" << v1.capacity() << endl; cout << "长度为:" << v1.size() << endl; v1.clear();//清空数据 cout <<"v1.clear()后" << endl; cout <<"容量为:" << v1.capacity() << endl; cout <<"长度为:"<< v1.size()<<endl; v1.~vector<int>();//释放内存 cout << "v1.~vector<int>()后" << endl; cout << "容量为:" << v1.capacity() << endl; cout << "长度为:" << v1.size() << endl; if (v1.empty())//判断vector是否为空 cout << "vector为空"; return 0; }

下面为结果

转载请注明原文地址: https://www.6miu.com/read-20913.html

最新回复(0)