C++顺序容器简介

顺序容器的种类简单介绍

顺序容器类型功能头文件
vector可变长度的数组,也叫向量< vector >
deque双端队列,也就是可以两头插入和删除的队列。实际上也支持随机访问< deque >
list一个双向链表< list >
forward_list一个单项链表< forward_list >
array固定大小的数组,和C语言当中的数组差不多< array >
string常用的字符串< string >

上面的除了array是固定大小不变的以外,剩下的容器都是可变长度,灵活增加和减少的。不同容易在不同的操作上面效率各有优劣,在内存当中的存储和管理方式也各有不同。其中array和froward_list是C++标准新增加的类型。

容器操作

内容比较多,截个图吧
这里写图片描述
这里写图片描述
这里写图片描述

迭代器

经常用于用来遍历和操作容器,迭代器的遍历范围是一个左闭右开的区间,比如有一个

vector<int> v={1,2,3,4}
auto beg=v.begin(),ed=v.end();
cout<<*beg<<endl;//输出1
cout<<*ed<<endl;//超出范围,但是编译器不会报错

现在又一对迭代器beg和ed分别指向同一个元素的begin()和end()那么

  • 如果beg==ed,那么证明容器为空
  • 如果beg!=ed,那么里面至少包含一个元素
  • 可以对beg进行递增,使得beg==ed
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    vector<int> v={1,2,3,4};
    auto ed=v.end();
    for(auto beg=v.begin();beg!=ed;beg++)
        cout<<*beg<<endl;
    return 0;
}

如果想从后往前遍历和操作容器,可以使用反向迭代器。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    vector<int> v={1,2,3,4,5,6};
    //rit的类型是vector<int>::reverse_iterator 
    for(auto rit=v.rbegin();rit!=v.rend();rit++)
        cout<<*rit<<" ";
    cout<<endl;
    return 0;
}

如果只想遍历,不想对容器中的元素进行操作。可以是用const_iterator,那么反向的const迭代器就是
const_reverse_iterator

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    vector<int> v={1,2,3,4,5,6};
    for(auto cit=v.cbegin();cit!=v.cend();cit++)
        cout<<(*cit)<<" ";
    cout<<endl;
    for(auto rcit=v.crbegin();rcit!=v.crend();rcit++)
        cout<<*rcit<<" ";
    cout<<endl;
    return 0;
}

书上说在C++11当中,begin和end成员有两种,一种const,另外一种是非const。根据调用的对象类型来返回是否为const

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    vector<int> v={1,2,3,4,5,6};
    vector<int>::const_iterator cit=v.begin();//虽然是begin,但是实际上是cbegin
    for(cit=v.begin();cit!=v.end();cit++)
        ++(*cit);
    return 0;
}

to be continue~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值