• vector 容器


    向量vector 可以理解为一个能存放任意类型的动态分配的数组。

    这里展示一些常用的函数

    加入头文件

    #include <vector>

    首先创建一个vector

        std::vector<int> v;

    表示我要创建一个向量,这个向量名字叫v,存放的全都是int型的数据。

    这里的 int 可以换成 string  double  float 等任意数据类型。


    我们知道数组在定义的时候需要写明数组的容量。向量也可以这样做

        std::vector<int> v(10);

    表示我定义了一个名字叫 v 的向量,v里面有 10 个 int 型的数据。


    也可以在定义的同时,就初始化向量的数据

        std::vector<int> v(10,20);

    表示我定义了一个含有10个元素 ,且每一个元素值都是 int 型的 20 的向量 名字叫 v。


    元素的个数

    std::vector<int>::size_type count = v.size();

    前面的 std::vector<int>::size_type 表示数据类型 可以理解为无符号整形


    查看首位元素

    v.front();      //返回首元素的值    
    v.back();      //返回尾元素的值

    在向量的末尾添加一个元素 30

        v.push_back(30);

    只能在末尾添加,添加之后向量的size就变化了

    int main(int argc,char *argv[])
    {
        std::vector<int> v(10,20);
        cout<<v.size()<<endl;
        v.push_back(30);
        cout<<v.size()<<endl;
        return 0;
    }

    输出结果为

    10
    11

    可见改变了向量的size。


    把刚才添加的元素删掉

    v.pop_back();

    删除最后一个元素,看下面示例代码:

    int main(int argc,char *argv[])
    {
        std::vector<int> v(10,20);
        cout<<v.size()<<endl;
        v.push_back(30);
        cout<<v.size()<<endl;
        v.pop_back();
        cout<<v.size()<<endl;
        return 0;
    }

    输出结果为

    10
    11
    10

    清空所有的元素

        v.clear();

    示例代码:

    int main(int argc,char *argv[])
    {
        std::vector<int> v(10,20);
        cout<<v.size()<<endl;
        v.push_back(30);
        cout<<v.size()<<endl;
        v.pop_back();
        cout<<v.size()<<endl;
        v.clear();
        cout<<v.size()<<endl;
        return 0;
    }

    输出结果:

    10
    11
    10
    0

    此时向量 v  中已经没有任何元素


    判断向量是否为空

    bool isempty = v.empty();

    访问指定位置的元素

        std::vector<int> v(10);
    
        for (int i = 13; i != 20; ++i)
        {
            v.push_back(i);
        }
    
        cout<<v.at(16)<<endl;

    访问到第16个元素,其值为19


    利用迭代器访问向量元素

    首先定义一个迭代器

        vector<int>::iterator iter;

    定义了一个类型为  vector<int> 的迭代器 名字叫 iter

    注意迭代器的数据类型应该和向量相同

    然后使用迭代器遍历向量

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

    插入元素

    v.insert();

    直接看一个例子

    int main(int argc,char *argv[])
    {
        std::vector<int> v(10);
    
        for (int i = 13; i != 20; ++i)
        {
            v.push_back(i);
        }
    
        v.insert(v.begin(),19);        //在最前面增加一个元素 19
        v.insert(v.begin()+1,17);    //在第一个元素后面 加一个元素 17
        v.insert(v.end(),2,3);        //在最后面增加2个元素 3
        for(vector<int>::iterator i = v.begin();i!=v.end();i++)
        {
            cout<<*i<<" ";
        }
    
        return 0;
    }

    运行结果如下:

    19 17 0 0 0 0 0 0 0 0 0 0 13 14 15 16 17 18 19 3 3 

    可以看到,初始化时的10个0并没有改变,用push_back() 加入的元素在后面

    用insert 插入的元素分别在第一个 第二和最后


    删除某个元素

    erase(iterator __position);
    erase(iterator __first, iterator __last);

    看下面的例子

    int main(int argc,char *argv[])
    {
        std::vector<int> v(10);
    
        for (int i = 13; i != 20; ++i)
        {
            v.push_back(i);
        }
    
        v.insert(v.begin(),19);        //在最前面增加一个元素 19
        v.insert(v.begin()+1,17);    //在第一个元素后面 加一个元素 17
        v.insert(v.end(),2,3);        //在最后面增加2个元素 3
    
        v.erase(v.begin()+1);                //删除第2个元素 (也就是刚才第二个添加的17)
        v.erase(v.begin()+1,v.begin()+10);    //删除第2到第11个元素 (总共删除了9个元素)
    
        for(vector<int>::iterator i = v.begin();i!=v.end();i++)
        {
            cout<<*i<<" ";
        }
    
        return 0;
    }

    运行结果如下

    19 0 13 14 15 16 17 18 19 3 3
  • 相关阅读:
    Zabbix 3.2.1 安装 Graphtree3.0.4 或 Graphtree3.2.x
    jquery-1
    AngularJS (1)
    css-2 (Text Font)
    css
    Java经验
    js经验
    mysql经验
    MySQL 函数
    jquery 效果
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12598674.html
Copyright © 2020-2023  润新知