c++学习笔记(Stl、位运算以及常用库函数)【上】

SRL容器

tips:stl容器中只有队列,优先队列和栈这三个是没有clear函数的,其他的都有


1.#include<vector>

vector是一个可变长数组,支持随机访问,不支持在任意位O(1)插入。为了保证效率,元素的增删一般应该在末尾进行。

1.1声明

#include<vector>

using namespace std;

int main()

{

    vector<int> a({1,2,3});  //相当于一个长度动态变化的int数组

    vector<int> b[233]; //相当于一个一维长233,第二位长度动态变化的int数组

    struct rec{int x,y;};

    vector<rec> c;  //自定义的结构体类型也可以保存在vector中

}

1.2函数

(1)size()    //a.size()

Size就是返回vector的实际长度(包含的元素个数)

(2)empty()  //a.empty()

它返回的是一个bool值,如果是空的就返回true,非空就返回false

(3)clear()  //a.clear()

把vector清空

(4)a.front()  //a[0]

等价于a[0]

(5)a.back()

等价于a.[a.size()-1]

(6)push_back(x)

把元素x插入到vector a的尾部

(7)pop_back(x)

删除vector a的最后一个元素

1.3迭代器

迭代器就像STL容器的指针,可以用星号*操作符解除引用。

一个保存int的vector的迭代器声明方法为:vector<int>::iterator it;

vector的迭代器是“随机访问迭代器”,可以把vector的迭代器与一个整数相加减,其行为和指针的移动类似。可以把vector的两个迭代器相减,其结果也和指针相减类似,得到两个迭代器对应下标之间的距离。

每一个vector都有两个特殊迭代器,begin()和end()

bengin指向vector的第一个元素,end指向最后一个元素的后一个

*a.begin()的效果其实等同于a[0]

所有的容器都是左闭右开的一个结构,[begin,end),end函数返回的是vectoer的尾部,也就是第n个元素往后的边界,*a.end和a[n]一样都是数组越界,其中n=a.size();

1.4遍历vector

三种方案

1.下标来遍历

for(int i=0;i<a.size();i++)

        cout<<a[i]<<endl;

2.使用迭代器来遍历

//这里为了方便也可以使用auto i=a.begin();

for(vector<int>::iterator i=a.begin();i!=a.end();i++)

        cout<<*i<<endl;

3.范围遍历

for(int x:a)    cout<<x<<endl;

 


2.#include<queue>

queue<int> q;

queue<double> a;

struct rec{

    int a,b,c;

};

queue<rec> r;

以上是队列的基本定义方式

头文件queue主要包括循环队列queue优先队列priority queue两个容器。

优先队列维护的是一个没有序的集合,插入顺序无所谓,弹出时会优先弹出最大的数。

2.1优先队列

2.1.1声明

priority_queue<int> q;  //默认是大顶堆

priority_queue<int,vector<int>,greater<int>> q2;    //小顶堆

值得一提的是,在优先队列中也是可以使用结构体优先队列的,但是要注意在结构体的定义中需要重载小于号。(大根堆是重载小于号,小根堆重载大于号)

至于为什么,有些复杂暂时不做了解,看一下代码

    struct rec{

        int a,b;

        bool operator<(const rec &x)const{

            return a>x.a;

        }

    }

2.1.2基本操作函数

q.push(1)    // 把元素插入堆

q.pop()     // 删除堆顶元素(最大值)

q.top()     // 查询堆顶元素(最大值

2.2循环队列

2.2.1基本操作函数

q.push(1)    // 从队尾插入

q.pop()     // 从队头弹出

q.front()   // 返回队头元素

q.back()    // 返回队尾元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值