C++ STL容器详解之vector

本文详细介绍了C++ STL中的Vector容器,包括其定义、初始化、主要成员函数及使用示例。涵盖了向量的大小调整、元素访问、排序、插入与删除等关键操作。

vector称为向量,其实它就是一个不定长数组。它属于序列式容器。而其他的序列式容器有deque , list , queue , priority_queue , stack 。接下来我会详解它们的。

vector可以实现数据结构中的队列、数组和堆栈的所有功能,是不是很6!

-vector的对象定义:

vector< T > v;
vector中的元素可以是任意型别T,比如int,double,string等等

vector<int> v; vector<string> v;
-vector的对象初始化:

vector类对象实现初始化操作可以使用push_back()

vector<int> v;
v.push_back(1);
v.push_back(2);

vector的对象可以使用reserve()函数预先设置容器的大小

v.reserve(2);
-容器的大小和容量:

size()和capacity()用来统计容器中元素的数量
size()返回容器中现有的元素数量;capaticy()返回容器中实际能够容纳的元素数量。resize()可以修改容器的大小

vector<int> v;
v.push_back(1);v.push_back(2);
int s = v.size();
int c = v.capacity();
cout<<s<<endl;//输出为2
cout<<c<<endl;//输出为2
v.resize(8);
int s1 = v.size();
cout<<s1<<endl;//输出为8

vector成员函数和高级编程:

-1.判断向量是否为空

empty()

    vector<int> v;
    if(v.empty()) printf("is_empty\n");
    else printf("is_not_empty");
    v.push_back(1);
    if(v.empty()) printf("is_empty\n");
    else printf("is_not_empty");

-2.遍历向量元素:

两种方法:1.迭代器 2.类似数组遍历的方式,用循环

    vector<int>::iterator it;
    for(it = v.begin();it!=v.end();it++)
        cout<<*it<<endl;
    ----------------------------------
    for(int i =0;i<v.size();i++)
        cout<<v[i]<<endl;

-3.元素访问方法:

at(index) , [index] , front()(返回第一个元素) , back()(返回最后一个元素)

    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    cout<<v.at(0)<<endl;输出1
    cout<<v[0]<<endl;输出1
    cout<<v.front()<<endl;输出1
    cout<<v.back()<<endl;输出2

-4.迭代器相关函数:

begin() , end() ; 从第一个到最后一个
rbegin() , rend() ;从最后一个到第一个(逆向)


-5.元素查找和搜索:

find()函数

    vector<int> v;
    v.push_back(2);
    vector<int>::iterator it = find(v.begin(),v.end(),2);
    if(it==v.end()) cout<<"no"<<endl;
    else cout<<"yes"<<endl;

-6.元素排序

sort()函数,注意别忘了头文件< algorithm >

默认排序(升序):

    vector<int> v;
    v.push_back(5);v.push_back(4); v.push_back(6);
    sort(v.begin(),v.end());

也可以自己重写排序

    bool cmp(const int& a,const int& b){
    return a>b;
    }
    sort(v.begin(),v.end(),cmp);//实现降序排列

-7.插入元素

push_back()可以,还可以使用insert()将对象插入至vector中任意位置,返回值为迭代器。

    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    for_each(v.begin(),v.end(),print);//输出1 2
    cout<<endl;
    v.insert(v.begin(),-1);
    for_each(v.begin(),v.end(),print);//输出-1 1 2

-8.删除元素

pop_back():删除最后一个元素
erase():删除由迭代器指定的元素,也可删除区间范围的元素
clear():删除所有元素

    void print(int &e)
    {
    cout<<e<<" ";
    }
    -------------------------------------
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    for_each(v.begin(),v.end(),print);//输出1 2 3
    v.pop_back();//删除最后一个元素3
    for_each(v.begin(),v.end(),print);//输出1 2

    v.erase(v.begin());//删除第一个元素1
    for_each(v.begin(),v.end(),print);//输出2

    v.clear();//清空
    for_each(v.begin(),v.end(),print);//什么也不输出

差不多了,关键的操作就整理到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值