C++中的模板类vector

来源:互联网 发布:抛硬币实验数据 编辑:程序博客网 时间:2024/06/06 22:21

初步认识

模板类vector是一种动态数组,可以在运行程序时设置vector对象的长度,可以动态地进行删除、添加等操作,可以像访问数组一样用[]来访问某一个元素。在使用vector时,需要包含头文件<vector>

定义模板类vector
如果要定义一个vector并命名为N,其中每个元素的类型都是int,可以这样写:

vector<int> N;

添加元素
可以使用push_back()方法’向vctor末尾添加元素:

    for (int i = 0; i < 5; i++)    {        N.push_back(2*i);    }

元素输出
可以使用同数组一样的方法输出vector:

for (int i = 0; i < N.size(); i++)    {        cout << "the "<<i<<"th number = " << N[i] << endl;    }

获取vector大小

cout << "size of N = " << N.size() << endl;

清空vector

N1.clear();cout << "size of N1 = " << N1.size()<<endl;

vector中的迭代器使用

迭代器的作用和指针很像,它使得我们对vector的操作更加灵活。

定义一个迭代器
如果想定一个迭代器并指向上面定义的vector的起始位置,可以这么写:

    vector<int>::iterator pd;    pd = N.begin();    //auto pd = N.begin(); //C++11自动推断类型

值得一提的是,c++11中可以直接使用auto来推断定义的类型,使定义迭代器更加方便。另外,.begin()成员函数返回第一个元素的位置,相应的,.end()返回结尾后一位的位置。这两个函数在结合迭代器使用非常频繁。

使用迭代器遍历vector

    auto pd = N.begin();    int j = 0;    for (pd = N.begin(); pd != N.end(); pd++)    {        cout << "the " << j << "th number = " << *pd << endl;        j++;    }

需要注意的是,.end()返回的是结尾后一位的位置。

删除vector中指定位置或区域元素

    N.erase(N.begin()); //删除指定位置元素    N.erase(N.begin(), N.begin() + 2); //删除指定区间元素:N.begin(),N.begin()+1    N.pop_back(); //删除最后一个位置元素

vector中插入元素

    N.insert(N.begin() + 1, 10); //插入单个元素    N.insert(N.begin() + 2, {20, 30}); //插入多个元素    //插入另一个vector中的某一区域元素    vector<int> M;    M.push_back(40);    M.push_back(50);    M.push_back(60);    N.insert(N.begin()+4, M.begin(), M.end());

完整示例代码

/* main.cpp描述:C++中vector的基本操作日期:2017年11月21日*/#include <iostream>#include <vector>using namespace std;int main(){    /*vector基本操作*/    cout << "**************************" << endl;    //定义、添加元素、输出    vector<int> N;    for (int i = 0; i < 5; i++)    {        N.push_back(2*i);    }    for (int i = 0; i < N.size(); i++)    {        cout << "the "<<i<<"th number = " << N[i] << endl;    }    cout << "size of N = " << N.size() << endl;    //清空    cout << endl;    vector<int> N1 = N;    cout << "size of N1 = " << N1.size()<<endl;    N1.clear();    cout << "size of N1 = " << N1.size()<<endl;    /*vector中的迭代器*/    cout << "**************************" << endl;    //定义迭代器    vector<int>::iterator pd;    pd = N.begin();    //auto pd = N.begin(); //C++11自动推断类型    //与指针用法类似    for (int i = 0; i < N.size(); i++)    {        cout << "the " << i << "th number = " << *(pd + i) << endl;    }    //利用迭代器遍历vector    cout << "**************************" << endl;    int j = 0;    for (pd = N.begin(); pd != N.end(); pd++)    {        cout << "the " << j << "th number = " << *pd << endl;        j++;    }    //删除vector中指定位置或区域元素    cout << "**************************" << endl;    N.erase(N.begin());    N.erase(N.begin(), N.begin() + 2); //N.begin(),N.begin()+1    N.pop_back(); //删除最后一个位置元素    j = 0;    for (pd = N.begin(); pd != N.end(); pd++)    {        cout << "the " << j << "th number = " << *pd <<endl;        j++;    }    //vector中插入元素    cout << "**************************" << endl;    N.insert(N.begin() + 1, 10); //插入单个元素    N.insert(N.begin() + 2, {20, 30}); //插入多个元素    j = 0;    for (pd = N.begin(); pd != N.end(); pd++)    {        cout << "the " << j << "th number = " << *pd << endl;        j++;    }    //插入另一个vector中的某一区域元素    cout << "**************************" << endl;    vector<int> M;    M.push_back(40);    M.push_back(50);    M.push_back(60);    N.insert(N.begin()+4, M.begin(), M.end());    j = 0;    for (pd = N.begin(); pd != N.end(); pd++)    {        cout << "the " << j << "th number = " << *pd << endl;        j++;    }    cin.get();    return 0;}

输出结果


vector_example_result

原创粉丝点击