tan90dx

使用C++ STL避免重复造轮子
emmm似乎很多人都对stl有点抵触情绪,觉得stl慢什么的,但是我觉得对于算法竞赛而言,时间就是金钱鸭,合理的利...
扫描右侧二维码阅读全文
03
2019/05

使用C++ STL避免重复造轮子

emmm似乎很多人都对stl有点抵触情绪,觉得stl慢什么的,但是我觉得对于算法竞赛而言,时间就是金钱鸭,合理的利用stl可以避免重复造很多轮子,提高解题效率。这么好的东西为啥不用呢。。。。。
可能是我太弱了吧。(;´д`)ゞ

容器

容器顾名思义,就是用来存放某些东西的,而在这里的容器存放的则是数据,c++封装了几个容器,实现了部分数据结构,总的来说可以分为三类:
1.顺序容器:有序(插入顺序)而无序(元素未经过排序)
2.关联式容器:无序(不支持随机访问且与插入顺序无关)而有序(元素会被容器按照某种规则排序)
3.容器适配器:基于某种容器而进一步封装而来

顺序容器

vector

vector为动态数组,使用需要包含

#include<vector>

vector容器的定义和初始化

vector<Type>name();//尖括号中的为数据类型
//其常用的构造函数如下
vector <Type> name; // 构造空vecror

vector <Type> name(vector <T> v1); // 构造一个v1的副本name

vector <Type> name(int n, Type i); // 构造一个vector,元素为n个i

vector <Type> name(int n); // 构造一个vector,并为其分配容纳n个元素的空间

vector <Type> name(itr start, itr end); // 构造一个vector,以区间[start,end]为元素

list

deque

关联式容器

set

multiset

map

multiset

容器适配器

queue

stack

priority_queue(c++11)

算法

实践

1.实现归并排序


#include <vector>
#include <iostream>
#include <algorithm>

template<class Iter>
void merge_sort(Iter first, Iter last)
{
    if (last - first > 1) {
        Iter middle = first + (last - first) / 2;
        merge_sort(first, middle);
        merge_sort(middle, last);
        std::inplace_merge(first, middle, last);
    }
}

int main()
{
    std::vector<int> v{ 8, 2, -2, 0, 11, 11, 1, 7, 3 };
    merge_sort(v.begin(), v.end());
    for (auto n : v) {
        std::cout << n << ' ';
    }
    std::cout << '\n';
}
最后修改:2019 年 05 月 29 日 04 : 24 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论