码迷,mamicode.com
首页 > 其他好文 > 详细

Vector用法

时间:2020-11-17 12:25:42      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:stream   end   赋值   rect   迭代器   ++   front   元素   删除   

初始化Vector

  1. 初始化一个为{1,2,3,4,5,6,7}的Vector数组
vector<int> a = {1,2,3,4,5,6,7}

  1. 初始化一个有10个元素且所有元素都为2的Vector数组
vector<int> a(10, 2);

  1. 初始化一个大小为100值不确定的vector数组
vector<int> a(100);

  1. 用b向量创建a,整体性赋值
vector<int> b = {1,2,3,4,5};
vector<int> a(b);

  1. 用向量b的片段创建a
vector<int> b = {1,2,3,4,5};
vector<int> a(b.begin(),b.begin+3);

  1. 从数组中获得初值
int b[7]={1,2,3,4,5,9,8};
vector<int> a(b,b+3);

Vector重要的几个函数

函数名 作用
a.assign(b.begin(), b.begin()+3); 技术图片 b为向量,将b的0~2个元素构成的向量赋给a
a.assign(4,2); a只含4个元素,且每个元素为2
a.back(); 返回a的最后一个元素
a.front(); 返回a的第一个元素
a.at(); 传回索引idx所指的数据,如果idx越界,抛出out_of_range。
a.clear(); 清空a中的元素
a.empty(); 判断a是否为空,空则返回ture,不空则返回false
a.pop_back(); 删除a向量的最后一个元素
a.erase(a.begin()+1,a.begin()+3); 删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起
(包括它)一直到a.begin()+3(不包括它)
c.erase(pos); 删除pos位置的数据,传回下一个数据的位置。
a.push_back(5); 在a的最后一个向量后插入一个元素,其值为5
a.insert(a.begin()+1,5); 在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
a.insert(a.begin()+1,3,5); 在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
a.insert(a.begin()+1,b+3,b+6); b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),
如b为1,2,3,4,5,9,8 ,插入元素后为1,4,5,9,2,3,4,5,9,8
a.size(); 返回a中元素的个数;
a.capacity(); 返回a在内存中总共可以容纳的元素个数
a.max_size() 返回a最多能开到多大
a.resize(10); 将a的现有元素个数调至10个,多则删,少则补,其值随机
a.resize(10,2); 将a的现有元素个数调至10个,多则删,少则补,其值为2
a.swap(b); b为向量,将a中的元素和b中的元素进行整体性交换
c.rbegin() 传回一个逆向队列的第一个数据的迭代器,就是最后一个元素
c.rend() 传回一个逆向队列的最后一个数据的下一个位置迭代器,就是队首前面的元素,越界了
a.reverse() 保留适当容量,有几个元素容量就是几
a.max_size() 返回a最多能开到多大

从向量中读取元素

  1. 通过下标读取
int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(int i=0;i<=b.size()-1;i++)
    cout<<b[i]<<" ";
  1. 通过遍历器读取
int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(vector<int>::iterator it=b.begin();it!=b.end();it++)
    cout<<*it<<" ";

Vector常用算法库算法

  • 对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
sort(a.begin(),a.end());
  • 对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
reverse(a.begin(),a.end());
  • 把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
copy(a.begin(),a.end(),b.begin()+1);
  • 在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,查找成功返回一个指向指定元素的迭代器,查找失败返回end迭代器。
find(a.begin(),a.end(),10);

Vector的遍历方法

  1. 方法一
vector<int> a = {1,2,3,4,5,6,7,8};

for (int i = 0; i < a.size();i++)
    {
        cout << a.at(i) << endl;
    }

for (int i = 0; i < a.size();i++)
    {
        cout << a.at(i) << endl;
    }
  1. 方法二

a.begin(),a.end()会返回iterator或const_iterator,具体取决于调用对象是什么。

a.cbegin()和a.cend()是C++ 11特性,会返回一个const的迭代器,此迭代器不能用于修改他指向的元素。

vector<int> a = {1,2,3,4,5,6,7,8};

for (vector<int>::const_iterator iter = a.cbegin(); iter != valList.cend(); iter++)
    {
        cout << (*iter) << endl;
    }

  1. 方法三(C++ 11)
for (auto val : valList)
{
    cout << val << endl;
}

Vector元素也可以是结构体

结构体要定义为全局的

#include<stdio.h>  
#include<algorithm>  
#include<vector>  
#include<iostream>  
using namespace std;  
typedef struct rect  
{  
    int id;  
    int length;  
    int width;  
  //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。  
  bool operator< (const rect &a)  const  
    {  
        if(id!=a.id)  
            return id<a.id;  
        else  
        {  
            if(length!=a.length)  
                return length<a.length;  
            else  
                return width<a.width;  
        }  
    }  
}Rect;  
int main()  
{  
    vector<Rect> vec;  
    Rect rect;  
    rect.id=1;  
    rect.length=2;  
    rect.width=3;  
    vec.push_back(rect);  
    vector<Rect>::iterator it=vec.begin();  
    cout<<(*it).id<<‘ ‘<<(*it).length<<‘ ‘<<(*it).width<<endl;      
return 0;  
}  

Vector用法

标签:stream   end   赋值   rect   迭代器   ++   front   元素   删除   

原文地址:https://www.cnblogs.com/ApStar/p/13958183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!