• STL


    stack 模板类的定义在<stack>头文件中。
    stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque。
    定义stack 对象的示例代码如下:
    stack<int> s1;
    stack<string> s2;
    stack 的基本操作有:
    入栈,如例:s.push(x);
    出栈,如例:s.pop(); 注意,出栈操作只是删除栈顶元素,并不返回该元素。
    访问栈顶,如例:s.top()
    判断栈空,如例:s.empty(),当栈空时,返回true。
    访问栈中的元素个数,如例:s.size()。

    队列

    queue 模板类的定义在<queue>头文件中。
    与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
    定义queue 对象的示例代码如下:
    queue<int> q1;
    queue<double> q2;
    queue 的基本操作有:
    入队,如例:q.push(x); 将x 接到队列的末端。
    出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
    访问队首元素,如例:q.front(),即最早被压入队列的元素。
    访问队尾元素,如例:q.back(),即最后被压入队列的元素。
    判断队列空,如例:q.empty(),当队列空时,返回true。
    访问队列中的元素个数,如例:q.size()。

    优先队列

    在<queue>头文件中,还定义了另一个非常有用的模板类priority_queue(优先队列)。优先队列与队列的差别在于优先队列不是按照入队的顺序出队,而是按照队列中元素的优先权顺序出队(默认为大者优先,也可以通过指定算子来指定自己的优先顺序)。
    priority_queue 模板类有三个模板参数,第一个是元素类型,第二个容器类型,第三个是比较算子。其中后两个都可以省略,默认容器为vector,默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)。
    定义priority_queue 对象的示例代码如下:

    priority_queue<int> q1;  // 实现大根堆
    priority_queue< pair<int, int> > q2; // 注意在两个尖括号之间一定要留空格。
    priority_queue<int, vector<int>, greater<int> > q3; // 定义小的先出队,实现小根堆
    // greater要用到#include <functional>头文件
    

    priority_queue 的基本操作:
    入队,如例:q.push(x); 将x 接到队列的末端。
    出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
    访问堆顶元素,q.top()。
    判断队列空,如例:q.empty(),当队列空时,返回true。
    访问队列中的元素个数,如例:q.size()。
    初学者在使用priority_queue 时,最困难的可能就是如何定义比较算子了。如果是基本数据类型,或已定义了比较运算符的类,可以直接用STL 的less 算子和greater算子——默认为使用less 算子,即小的往前排,大的先出队。如果要定义自己的比较算子,方法有多种,这里介绍其中的一种:重载比较运算符。优先队列试图将两个元素x 和y 代入比较运算符(对less 算子,调用x<y,对greater 算子,调用x>y),若结果为真,则x 排在y 前面,y 将先于x 出队,反之,则将y 排在x 前面,x 将先出队。

    bool operator < (const T &t1, const T &t2)  // less算子用到
    {
        return t1.z < t2.z; // 按照z 的顺序来决定t1 和t2 的顺序
    }
    // priority_queue<T> pq;
    
    bool operator > (const T &t1, const T &t2)  // greater算子用到
    {
        return t1.z > t2.z; // 按照z 的顺序来决定t1 和t2 的顺序
    }
    // priority_queue<T, vector<T>, greater<T>> pq;
    

    定义比较算子参考:priority_queue,以及运算符重载STL-priority_queue用法(重点: 升序,小根堆)

    #include <iostream>
    #include <functional> // greater
    #include <string>
    #include <queue>
    using namespace std;
    
    struct Student {
    	string name;
    	int age;
    
    friend bool operator > (const Student &s1, const Student &s2)
    {
    		return s1.age > s2.age;
    }
    };
    
    int main()
    {
    	Student s1;
    	s1.name = "xiaoming";
    	s1.age = 12;
    	Student s2;
    	s2.name = "xiaohong";
    	s2.age = 15;
    
    	priority_queue<Student, vector<Student>, greater<Student>> pq;
    	pq.push(s1);
    	pq.push(s2);
    
    	Student s = pq.top();
    	cout << s.age << endl;  // 12
    	getchar();
    	return 0;
    }
    

    vector

    vector是C++标准模版库(STL,Standard Template Library)中的部分内容。之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说:vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

    使用vector容器之前必须加上<vector>头文件:#include<vector>;

    vector属于std命名域的内容,因此需要通过命名限定:using std::vector;也可以直接使用全局的命名空间方式:using namespace std;

    c.push_back(elem)在尾部插入一个elem数据。

    c.pop_back()删除末尾的数据。

    c.front()返回第一个数据。

    c.back()传回最后一个数据,不检查这个数据是否存在。

    c.begin()返回指向第一个数据的迭代器。

    c.end()返回指向最后一个数据之后的迭代器。

    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    vector<int>::iterator it;
    for(it = v.begin();it!=v.end();it++){
        cout << *it << "	";
    }
    cout << endl;
    

    c.clear()移除容器中的所有数据。

    c.empty()判断容器是否为空。

    c.size()返回容器中实际数据的个数。

    原文:STL之vector容器详解

    vector的类定义

    template <class t="" class="" alloc="alloc">
    class vector {  
    public:  
      typedef T value_type;
      typedef value_type* iterator;  
      // ...
      iterator begin() { // ... }
    }
    

     原文:STL vector 源码解析

    algorithm

    在#include <algorithm>这个头文件中有swap函数,其函数原型如下:

    template <class T> 
    void swap ( T& a, T& b )  
    {  
      T c(a); a=b; b=c;  
    }  

    标准库函数qsort

    #include <iostream>
    using namespace std;
    
    int compare(const void * a, const void * b)
    {
    	return *(int*)a - *(int*)b;
    }
    
    int main()
    {
    	int numbers[] = { 40, 10, 100, 90, 20, 25 };
    
    	qsort(numbers, 6, sizeof(int), compare);
    
    	for (int i = 0; i < 6; i++)
    		cout << numbers[i] << endl;
    	getchar();
    	return 0;
    }
    

    详细参考:C语言标准库函数qsort那点小事

  • 相关阅读:
    Springboot | 私人订制你的banner
    模块化系列教程 | 深入源码分析阿里JarsLink1.0模块化框架
    Nutz | Nutz项目整合Spring实战
    Shrio | java.io.IOException: Resource [classpath:shiro.ini] could not be found
    手把手写框架入门(一) | 核心拦截器DispatchFilter实现
    Rabbitmq | ConnectionException:Connection refused: connect
    Spring Cloud学习总结(非原创)
    Spring Cloud Stream介绍-Spring Cloud学习第八天(非原创)
    Spring Cloud Bus介绍--Spring Cloud学习第七天(非原创)
    分布式配置中心介绍--Spring Cloud学习第六天(非原创)
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4749704.html
Copyright © 2020-2023  润新知