zoukankan      html  css  js  c++  java
  • C++中Vector的用法

    Vector功能

    1.Vector是一个在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。

    2.是一个能够存放任意类型的动态数组。 

    3.Vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。

    4.向量长度较长时效率比较低。

    序列式容器:Vector,Deque,List

     Vector:将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时;
     Deque:是“double-ended queue”的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时;
     List:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;

    基本函数实现

    1.构造函数

    • vector():创建一个空vector
    • vector(int nSize):创建一个vector,元素个数为nSize
    • vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
    • vector(const vector&):复制构造函数
    • vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中

    2.增加函数

    • void push_back(const T& x):向量尾部增加一个元素X
    • iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
    • iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
    • iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

    3.删除函数

    • iterator erase(iterator it):删除向量中迭代器指向元素
    • iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
    • void pop_back():删除向量中最后一个元素
    • void clear():清空向量中所有元素

    4.遍历函数

    • reference at(int pos):返回pos位置元素的引用
    • reference front():返回首元素的引用
    • reference back():返回尾元素的引用
    • iterator begin():返回向量头指针,指向第一个元素
    • iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
    • reverse_iterator rbegin():反向迭代器,指向最后一个元素
    • reverse_iterator rend():反向迭代器,指向第一个元素之前的位置

    5.判断函数

    • bool empty() const:判断向量是否为空,若为空,则向量中无元素

    6.大小函数

    • int size() const:返回向量中元素的个数
    • int capacity() const:返回当前向量张红所能容纳的最大元素值
    • int max_size() const:返回最大可允许的vector元素数量值

    7.其他函数

    • void swap(vector&):交换两个同类型向量的数据
    • void assign(int n,const T& x):设置向量中第n个元素的值为x
    • void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素

    1.push_back 在数组的最后添加一个数据

    2.pop_back 去掉数组的最后一个数据

    3.at 得到编号位置的数据

    4.begin 得到数组头的指针

    5.end 得到数组的最后一个单元+1的指针

    6.front 得到数组头的引用

    7.back 得到数组的最后一个单元的引用

    8.max_size 得到vector最大可以是多大

    9.capacity 当前vector分配的大小

    10.size 当前使用数据的大小

    11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值

    12.reserve 改变当前vecotr所分配空间的大小

    13.erase 删除指针指向的数据项

    14.clear 清空当前的vector

    15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)

    16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)

    17.empty 判断vector是否为空

    18.swap 与另一个vector交换数据

    应用实例
    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    bool compare(int a, int b) {
        return a > b;//升序序列,如果改为a>b,则是降序序列
    }
    void main() {
        vector<int> obj;//
        for (int i = 0; i < 5; i++) {
            obj.push_back(i);//在向量末尾添加数据
            cout << obj[i] << ",";
        }
        cout <<"容器容量为:"<< obj.size() << endl;
    
        obj.pop_back();//去掉最后一个元素
        cout << "去掉最后一个元素之后容器容量为:" << obj.size() << endl;
    
        obj.clear();//清除容器中的数据
        cout << "清除之后容器容量为:" << obj.size() << endl;
    
        obj.push_back(9);
        obj.push_back(6);
        obj.push_back(88);
        obj.push_back(192);
        obj.push_back(413);
        
        //排序使用sort(int start,int end)方法需要添加#include <algorithm>头文件
        //从小到大排序
        sort(obj.begin(),obj.end());
    
        cout << "从小到大排序:" << endl;
        for (int i = 0; i < 5; i++) {
            cout << obj[i] << ",";
        }
        cout << "
    ";
    
        //从大到小排序
        reverse(obj.begin(), obj.end());
    
        cout << "从大到小排序:" << endl;
        for (int i = 0; i < 5; i++) {
            cout << obj[i] << ",";
        }
        cout << "
    ";
        
        //重写sort方法
        int a[10] = {1,8,6,9,413,722,816,0,2,10};
        sort(a, a + 10, compare);
        cout << "重写sort之后从大到小排序为:"<< endl;
        for (int i = 0; i < 10; i++) {
            cout << a[i] << ",";
        }
        cout << "
    ";
        system("pause");
    }
    运行结果
    0,1,2,3,4,容器容量为:5
    去掉最后一个元素之后容器容量为:4
    清除之后容器容量为:0
    从小到大排序:
    6,9,88,192,413,
    从大到小排序:
    413,192,88,9,6,
    重写sort之后从大到小排序为:
    816,722,413,10,9,8,6,2,1,0,
    二维数组
    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    void main() {
    
        vector<vector<int> > obj(6, vector<int>(6)); //定义二维动态数组6行6列 
    
        for (int i = 0; i< obj.size(); i++)//输出二维动态数组 
        {
            cout << "" << i << "行元素为:" << endl;
            for (int j = 0; j<obj[i].size(); j++)
            {
                cout << obj[i][j] << " ";
            }
            cout << "
    ";
        }
        system("pause");
    }
    运行结果
    第0行元素为:
    0 0 0 0 0 0
    第1行元素为:
    0 0 0 0 0 0
    第2行元素为:
    0 0 0 0 0 0
    第3行元素为:
    0 0 0 0 0 0
    第4行元素为:
    0 0 0 0 0 0
    第5行元素为:
    0 0 0 0 0 0
    
    
    
     
     
     
     
     
    唯有热爱方能抵御岁月漫长。
  • 相关阅读:
    AS3.0纯代码编写的两款loading效果
    AS3.0 Vector的运用
    java 垃圾回收总结(1)
    as3垃圾回收机制
    AS3.0 效率优化
    数组去重的方法
    javascript 的垃圾回收机制讲一下
    浅拷贝和深拷贝
    判断 js 类型的方式
    前端安全问题?
  • 原文地址:https://www.cnblogs.com/syq816/p/12234598.html
Copyright © 2011-2022 走看看