您的位置:首页 > 编程语言 > C语言/C++

C++标准库vector类型

2015-09-01 18:55 567 查看
vector属于顺序容器,所谓顺序容器,就是元素的顺序与元素的值无关,与元素加入容器的位置相对应。

对于vector可以将其理解为可变大小数组,支持快速随机访问,在尾部之外的位置插入删除可能会比较慢。了解完概念接下来就开始学习它的用法

假设以下代码前面都包含vector头文件,并包含using namespace std;

1.创建vector对象

vector<int> vec;


此种定义下vec容器为空,其中尖括号中是容器中保存的类型

vector<int> vec(10,5);


此种定义下vec中保存了10个5

(3)

int a[5];
vector<int> vec(begin(a),end(a));


此种定义下vec保存了数组a中的所有元素

vector的定义方法有很多,这里就只列一些常见的

2.vector中元素的访问

(1)通过迭代器访问

vector<int> vec;

vector<int>::iterator it;

for(it = vec.begin();it != vec.end();it++)
{
    cout<<*it;
}


(2)通过下标访问

vector<int> vec(3,5);

for(int i=0;i<3;i++)
{
    cout<<vec[i];
}


3.vector类型的基本操作

(1)尾部添加数据

vec.push_back(a);


具体实例如下

#include<iostream>
#include<vector>

using namespace std;

int main(int argc,char **argv)
{
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    for(auto x:vec)
    {
        cout<<x<<" ";
    }
    cout<<endl;

    return 0;
}


(2)在任意位置插入数据

//在第i+1个数据前插入a
vec.insert(vec.begin()+i,a);


实例如下

#include<iostream>
#include <vector>
using namespace std;
int main(void)

{
    vector<int>v(3);
    v[0] = 1;
    v[1] = 3;
    v[2] = 4;

    v.insert(v.begin(),0);
    v.insert(v.begin()+2,2);
    v.insert(v.end(),5);
    vector<int>::iterator it;

    for(it = v.begin(); it != v.end(); it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;

    return 0;

}


(3)删除元素

删除第i+1个元素
vec.erase(vec.begin()+i);


实例如下

#include<iostream>
#include<vector>

using namespace std;

int main(int argc,char **argv)
{
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    //删除第二个元素
    vec.erase(vec.begin()+1);

    for(auto x:vec)
    {
        cout<<x<<" ";
    }
    cout<<endl;

    return 0;
}


(4)vector的大小

//返回vector中已有的元素个数
vec.size();
//返回vector中可保存的最大元素个数
vec.max_size();
//判断vector是否为空
vec.empty()


实例如下

#include<iostream>
#include<vector>

using namespace std;

int main(int argc,char **argv)
{
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    //获得vec的已有元素的个数
    cout<<"已有元素:"<<vec.size()<<endl;

    //获得vec中可以保存的最大元素个数
    cout<<"最大保存元素个数:"<<vec.max_size()<<endl;

    //判断vec是否为空
    if(vec.empty())
    {
        cout<<"vec为空"<<endl;
    }
    else
    {
        cout<<"vec不为空"<<endl;
    }

    return 0;
}


4.迭代器失效问题

由于向vector中添加元素或删除元素,可能会使迭代器失效,所以必须保证每次改变容器的操作之后都能正确的重新定位迭代器

5.vector对象是如何增长的

当我们向vector中添加新元素时,若此时系统给vector的内存已被占完,则系统或为vector重新分分配一块内存该内存会比他新的内存需求更大,这样就可以保证当再有新的元素添加进来时,就不会总是要重新分配新的内存了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: