C++ STL容器和算法:详解和实例演示

简介: C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。
+关注继续查看

C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。

容器

vector

vector是一个动态数组,可以在运行时调整大小。它的优点在于可以快速地访问元素,缺点是在插入和删除元素时需要移动后面的元素。

#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << " ";
    }
    cout << endl;
    v.pop_back();
    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << " ";
    }
    cout << endl;
    return 0;
}

除了push_backpop_backvector还提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用v.front()v.back()分别访问首元素和尾元素,使用v.insert()v.erase()在任意位置插入和删除元素。此外,vector还提供了v.empty()v.size()分别判断容器是否为空和获取容器大小。

list

list是一个双向链表,可以在任意位置插入和删除元素,但访问元素比较慢。

#include <list>
#include <iostream>
using namespace std;
int main() {
    list<int> l;
    l.push_back(1);
    l.push_back(2);
    l.push_back(3);
    for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
    l.pop_back();
    for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}

vector一样,list也提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用l.front()l.back()分别访问首元素和尾元素,使用l.insert()l.erase()在任意位置插入和删除元素。此外,list还提供了l.empty()l.size()分别判断容器是否为空和获取容器大小。

map

map是一个键值对容器,可以快速地根据键值查找对应的值。

#include <map>
#include <iostream>
using namespace std;
int main() {
    map<string, int> m;
    m["a"] = 1;
    m["b"] = 2;
    m["c"] = 3;
    for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {
        cout << it->first << ":" << it->second << " ";
    }
    cout << endl;
    m.erase("b");
    for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {
        cout << it->first << ":" << it->second << " ";
    }
    cout << endl;
    return 0;
}

vectorlist一样,map也提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用m.find()查找元素,使用m.insert()插入元素,使用m.erase()删除元素。此外,map还提供了m.empty()m.size()分别判断容器是否为空和获取容器大小。

算法

除了容器,STL还提供了一些常用的算法,可以方便地操作容器中的元素。

sort

sort是一个排序算法,可以快速地将数组或容器中的元素按照指定规则排序。

#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> v;
    v.push_back(3);
    v.push_back(2);
    v.push_back(1);
    sort(v.begin(), v.end());
    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << " ";
    }
    cout << endl;
    return 0;
}

sort的第一个参数是要排序的容器的起始地址,第二个参数是要排序的容器的结束地址。这里使用了vectorbegin()end()函数获取迭代器,也可以使用数组名和数组长度作为参数。

sort默认是升序排序,可以通过第三个参数指定排序规则。比如,可以使用greater()降序排序,使用less()升序排序。

find

find是一个查找算法,可以快速地在数组或容器中查找指定元素。

#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    vector<int>::iterator it = find(v.begin(), v.end(), 2);
    if (it != v.end()) {
        cout << "found " << *it << endl;
    } else {
        cout << "not found" << endl;
    }
    return 0;
}

find的第一个参数是要查找的容器的起始地址,第二个参数是要查找的容器的结束地址,第三个参数是要查找的元素。find返回一个迭代器,指向第一个等于要查找元素的位置,如果没有找到则返回容器的结束地址。

除了find,STL还提供了很多其他的查找算法,比如find_if可以根据指定规则查找元素,binary_search可以判断容器中是否含有指定元素,lower_boundupper_bound可以查找元素的下界和上界。

结论

本文介绍了C++ STL中的一些常用容器和算法,它们可以大大提高开发效率,开发者应该熟练掌握它们的使用。除了本文介绍的容器和算法,STL还提供了很多其他的容器和算法,可以根据具体的需求选择使用。在使用STL时,要注意容器和算法的复杂度,避免出现性能问题。

最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:

牛客知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区

看完如果觉得有帮助,帮忙点个赞👍

相关文章
|
1天前
|
存储 API C++
C++STL之vector 容器
C++STL之vector 容器
|
1天前
|
算法 程序员 C++
C++STL之string类
C++STL之string类
|
26天前
|
存储 算法 C++
C++ STL priority_queue
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。
|
26天前
|
存储 设计模式 C++
C++ STL stack & queue
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
|
26天前
|
存储 C语言 C++
C++ STL list
上次我们详细的介绍了vector,今天我们继续来介绍一下TSTL中的另外一个容器list。list在基础的功能和结构上就是一个双向带头的循环链表,实现起来基本不难,但是list迭代器的封装是非常值得学习的。
|
1月前
|
存储 设计模式 算法
c++之STL详解(二)
c++之STL详解(二)
32 0
|
1月前
|
存储 算法 程序员
c++之STL详解(一)
c++之STL详解(一)
38 0
|
1月前
【C++STL】list的反向迭代器
【C++STL】list的反向迭代器
13 0
|
1月前
|
C++
【C++ STL】vector模拟实现
【C++ STL】vector模拟实现
23 0
【C++ STL】vector模拟实现
|
1月前
|
C++
相关产品
容器镜像服务
容器服务Kubernetes版
推荐文章
更多