vector 向量容器

vector 向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一
种简单、高效的容器,完全可以代替数组。
头文件:
#include <vector>

vector 容器的下标是从0 开始计数的.
对于vector 容器的容量定义,可以事先定义一个固定大小,事后, 可以随时调整其大小;也可以事先不定义,随时使用

push_back()方法从尾部扩张元素,通常使用 push_back()对vector 容器在尾部追加新元素。尾部追加元素,vector 容器会  自动分配新内存空间。可对空的vector 对象扩张,也可对已有元素的vector 对象扩张。
例如::vector<int> v;                          v.push_back(2);

insert()在某个元素位置前插入新元素
insert()方法可以在vector 对象的任意位置前插入一个新的元素,同时,vector 自动扩  张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。 
要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标
vector<int> v(3);
v[0]=2;
v[1]=7;
v[2]=9;
//在最前面插入新元素,元素值为8
v.insert(v.begin(),8);
//在第2 个元素前插入新元素1
v.insert(v.begin()+2,1);
//在向量末尾追加新元素3
v.insert(v.end(),3);
//定义迭代器变量
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++)
{
//输出迭代器上的元素值
cout<<*it<<" ";
}
//换行
输出:8 2 1 7 9 3

元素的删除:
erase()方法: 可以删除vector 中迭代器所指的一个元素或一段区间中的所有元素。
clear()方法: 则一次性删除vector 中的所有元素。
#include <vector>
#include <iostream>
using namespace std;
int main()
{
    vector<int> v(10);
    for(int i=0; i<10; i++)
    {
        v[i]=i;
    }
//删除下标是2 个元素,从0 开始计数
    v.erase(v.begin()+2);
//定义迭代器变量
    vector<int>::iterator it;
    for(it=v.begin(); it!=v.end(); it++)
    {
//输出迭代器上的元素值
        cout<<*it<<" ";
    }
//换行
    cout<<endl;
//删除迭代器第1 到第5 区间的所有元素
    v.erase(v.begin()+1,v.begin()+5);
    for(it=v.begin(); it!=v.end(); it++)
    {
//输出迭代器上的元素值
        cout<<*it<<" ";
    }
//换行
    cout<<endl;
//清空向量
    v.clear();
    cout<<v.size()<<endl;
    return 0;
}
运行结果:
0 1 3 4 5 6 7 8 9
0 6 7 8 9
0

两个重要的方法:
begin():返回的是首元素位置的迭代器
end():返回的是最后一个元素的下一元素位置的迭代器

创建vector对象:
创建 vector 对象常用的有三种形式。
(1)不指定容器的元素个数,如定义一个用来存储整型的容器:
vector<int> v;
(2)创建时,指定容器的大小,如定义一个用来存储10 个double 类型元素的向量容器:
vector<double> v(10);
注意,元素的下标为 0~9;另外,每个元素的值被初始化为0.0。
(3)创建一个具有n 个元素的向量容器对象,每个元素具有指定的初始值:
vector<double> v(10,8.6);
上述语句定义了 v 向量容器,共有10 个元素,每个元素的值是8.6。

访问:
1.利用下标
既可访问也可赋值 这点类似于数组的访问 方式。
vector<int> v(3);
v[0]=2;
v[1]=7;
v[2]=9;
cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;
2.也可以使用迭代器
迭代器的类型一定要与它 要遍历的vector 对象的元素类型一致。
vector<int> v(3);
v[0]=2;
v[1]=7;
v[2]=9;
//定义迭代器变量
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++)                       //注意:这里的it只能用it++,不可用it+=1;
{
//输出迭代器上的元素值
cout<<*it<<" ";
}

使用reverse 反向排列算法
reverse 反向排列算法,需要定义头文件“#include <algorithm>”,
//反向排列向量的从首到尾间的元素
reverse(v.begin(),v.end());
输出:9 8 7 6 5 4 3 2 1 

使用sort 算法对向量元素排序
使用 sort 算法,需要声明头文件“#include <algorithm>”。
//排序,升序排列
sort(v.begin(),v.end());
//自己设计排序比较函数:对元素的值进行降序排列
bool Comp(const int &a,const int &b)
{
if(a!=b)return a>b;
else return a>b;
}
//按Comp 函数比较规则排序
sort(v.begin(),v.end(),Comp);

向量的大小:
使用 size()方法可以返回向量的大小,即元素的个数。
使用 empty()方法返回向量是否为空。
//输出向量的大小,即包含了多少个元素
cout<<v.size()<<endl;
//输出向量是否为空,如果非空,则返回逻辑假,即0,否则返回逻辑真,即1
cout<<v.empty()<<endl;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值