C++中的模板类vector

初步认识

模板类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()返回的是结尾后一位的位置。

扫描二维码关注公众号,回复: 1108706 查看本文章

删除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

猜你喜欢

转载自blog.csdn.net/sinat_34474705/article/details/78597140
今日推荐