c++标准模板库STL【快速查找】【最全】【常用】【语法】

    xiaoxiao2022-07-03  128

    c++标准模板库STL【快速查找】【最全】【常用】【语法】

        c标准模板库STL快速查找最全常用语法         vector- 变长数组         set-内部自动有序且不含重复元素         string-字符串处理         map-键值对         queue-队列         priority_queue-优先队列         stack-栈         pair

    vector- 变长数组

    添加头文件:

    #include <vector>

        1

    定义vector:

    vector<typename> name; //typename可以是任何基本类型,也可以是STL容器 vector<vector<typename> > name; //c++11之前会将>>视为移位操作,所以要加空格> >

        1     2

    定义vector数组:

    vector<typename> Arrayname[arraySize]; //与vector<vector<typename> >不同的是一维已经固定长度为arraySize

        1

    访问:

        通过下标访问name[index]     通过迭代器访问     迭代器类似指针,定义为vector<typename>::iterator it = name.begin()     得到 it 后通过 *it 来访问vector里的元素, *(it + i) 来访问第i个元素     循环可以这样写:

    for(vector<typename>::iterator it = name.begin(); it != name.end(); it++){}

        1

    常用函数:

        push_back() 尾插,时间复杂度为O(1)

    pop_back() 尾删,时间复杂度为O(1) size() 长度,返回unsigned类型,时间复杂度为O(1) clear() 清空,时间复杂度为O(n) insert(it, x) 向迭代器it处插入元素x,时间复杂度为O(n) erase()

        删除单个元素 erase(it)     删除一个区间[first, last)的元素erase(first, last) //first与last都是迭代器     时间复杂度均为O(n)

    set-内部自动有序且不含重复元素

    添加头文件:

    #include <set>

        1

    定义set

    set<typename> name;

        1

    访问 只能通过迭代器访问:

    set<typename>::iterator it;

        1

    得到it之后按*it来访问set里的元素 由于除开vector和string之外的STL容器都不支持*(it + i)的访问方式,因此只能采用下列方式枚举:

    for(set<typename>::iterator it = name.begin(); it != name.end(); it++){}

        1

    常用函数

        insert() 时间复杂度O(logN)

    ,因为底层使用红黑树来实现 find(value) 返回对应值为value的迭代器,时间复杂度为O(logN) erase()

        删除单个元素         name.erase(it) 时间复杂度为O(1)

    name.erase(value) 时间复杂度为O(logN)

    删除一个区间[first, last)内的元素 name.erase(first, last), 时间复杂度为O(last−first)

    size() 时间复杂度为O(1) clear() 清空 O(N)

    string-字符串处理

    添加头文件

    #include <string>

        1

    定义

    string str; string str = "abcd"; //定义的同时初始化

        1     2

    访问 读入输出只能用cin和cout 或者用c_str()将string类型转成字符数组,再用printf()输出

    string str = "abcd"; printf("\n", str.c_str());

        1     2

        通过下标访问     通过迭代器访问     与vector一样可以通过*(it + i)的方式访问

    常用函数

        += 拼接赋值     ==、!=、<、<=、>、>=比较大小,字典序     length()/size() 返回string长度,O(1)

    insert() O(N)

        insert(pos, string) 在pos位置插入string     insert(it, it2, it3) it为原字符串的欲插入位置,it2和it3为待插入字符串的首尾迭代器,[it2, it3)

    erase()

        erase(it) 删除单个元素     erase(first, last) 删除区间[first, last)的所有元素     erase(pos, length), 删除pos处开始的length长度的字符个数

    clear() O(1)

    substr(pos, len) 返回从pos号位开始,长度为len的子串,时间复杂度为O(len) string::npos 是一个常数,用以find函数失配时的返回值,即等于-1也等于4294967295(unsigned_int类型最大值) find()

        find(str2) 找子串第一次出现的位置,若不是,返回string::npos     find(str2, pos), 从str的pos号位开始匹配str2     时间复杂度为O(mn)

        ,其中n和m分别是str和str2的长度

    replace() O(str.length())

            replace(pos, len, str2) 把str从pos号位开始,长度为len的子串替换为str2         replace(it1, it2, str2) 把str的迭代器[it1, it2)范围的子串替换为str2

    map-键值对

    添加头文件

    #include <map>

        1

    定义

    map<typename1, typename2> mp;

        1

    访问

        通过下标访问,例如mp[‘a’]     通过迭代器访问

     - map<typename1, typename2>::iterator it;  - for(map<typename1, typename2>::iterator it = mp.begin(); it != mp.end(); it++){     //it->first; 访问键     //it->second; 访问值 }

        1     2     3     4     5

    常用函数

        find(key) 返回key的映射的迭代器, 时间复杂度为O(logN)

    , 底层红黑树实现

    erase()

        erase(it) O(1)

    erase(key) O(logN) erase(first, last) 删除[first, last)区间元素,O(last−first)

    size() O(1)

    clear() O(N)

    queue-队列

    添加头文件

    #include <queue>

        1

    定义

    queue<typename> name;

        1

    访问

        front() 访问队首     back() 访问队尾

    常用函数

        push() O(1)

    front(),back() O(1) pop() O(1) 队首出队 empty() 检测queue是否为空,返回true为空,O(1) size() O(1)

    priority_queue-优先队列

    用堆来实现,每次插入元素根据元素的优先级向上调整到堆顶 添加头文件

    #include <queue>

        1

    定义

    priority_queue< typename > name;

        1

    访问 只能通过top()函数来访问队首元素(堆顶元素),也就是优先级最高的元素

    常用函数

        push() 往堆底插入元素,向上调整,所以时间复杂度为O(logN)

    top() O(1) pop() 令队首元素出队,将队尾元素复制到队首,并向下调整,删除队尾,所以时间复杂度为O(logN) empty() 检测是否为空,O(1) size() O(1)

    优先级设置

        基本数据类型

    priority_queue<int> q; priority_queue<int, vector<int>, less<int> > q;//vector<int>填写的是来承载底层heap的容器,less<int>是对第一个参数的比较类,less<int>表示数字大的优先级越大 priority_queue<int, vector<int>, greater<int> > q;//数字小的优先级大

        1     2     3

        结构体

    struct student{     //学生成绩     string s_id;     int s_grade;     friend bool operator < (student s1, student s2){         //重载< 重载>号会编译错误         return s1.s_grade < s2.s_grade;//s_grade大的优先级高         //若s_grade小的优先级高,则改为return s1.s_grade > s2.s_grade;     } } priority_queue<student> q;

        1     2     3     4     5     6     7     8     9     10     11

    将重载<放到student结构体外

    struct cmp{     bool operator (const student &s1, const student &s2){         //使用引用避免复制,提高效率         return s1.s_grade > s2.s_grade;     } } priority_queue<student, vector<student>, cmp> q;

        1     2     3     4     5     6     7

    stack-栈

    添加头文件

    #include <stack>

        1

    定义

    stack<typename > name;

        1

    访问 使用top()来访问栈顶元素

    常用函数

        push() O(1)

    top() O(1) pop() O(1) empty() O(1) size() O(1)

    pair

    添加头文件

    #include <utility>

        1

    定义

    pair<typename1, typename2> p; pair<string, int> p("jetlee", 18); //定义的同时初始化 //定义临时pair的两种方式 p = pair<string, int>("jetlee", 18); p = make_pair("jetlee", 18);

        1     2     3     4     5

    访问 pair中只有两个元素,分别用first和second来访问

    常用函数

        比较操作数:==、!=、<、<=、>、>=;比较规则是先比较first,first相同时再比较second ---------------------   作者:阶艺勿听   来源:   原文:https://blog.csdn.net/sinat_25721683/article/details/79073336   版权声明:本文为博主原创文章,转载请附上博文链接!

    最新回复(0)