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<int>()降序排序,使用less<int>()升序排序。

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时,要注意容器和算法的复杂度,避免出现性能问题。

最后

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

公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

C++ STL 容器和算法:详解和实例演示的更多相关文章

  1. C++中的STL中map用法详解(转)

    原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解   Map是STL的一个关联容器,它提供 ...

  2. 《算法详解:C++11语言描述》已出版

    经过漫长的编写.修订和印刷过程,书籍<算法详解:C++11语言描述>终于出版了!目前本书已在各大电商平台上架,搜索书名即可找到对应商品.本书的特色在于: 介绍最新的C++11.C++14和 ...

  3. BM算法  Boyer-Moore高质量实现代码详解与算法详解

    Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...

  4. kmp算法详解

    转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...

  5. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  6. [转] KMP算法详解

    转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的K ...

  7. 【转】AC算法详解

    原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...

  8. KMP算法详解(转自中学生OI写的。。ORZ!)

    KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...

  9. EM算法详解

    EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...

  10. Tarjan算法详解

    Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识....在这里和大家分享一下... Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了, ...

随机推荐

  1. fastdfs存储和下载过程

  2. python部署项目为什么要用Nginx和uWSGI

    一.测试运行python项目 1.1 Flask项目 说明1:当我们直接用编译器运行Flask项目的时候,会有一个提示:意思就是:这是开发环境的服务器,不能用于生产环境的部署,请使用WSGI的服务器替 ...

  3. 2024-02-28:用go语言,有一个由x轴和y轴组成的坐标系, “y下“和“y上“表示一条无限延伸的道路,“y下“表示这个道路的下限,“y上“表示这个道路的上限, 给定一批长方形,每一个长方形有(

    2024-02-28:用go语言,有一个由x轴和y轴组成的坐标系, "y下"和"y上"表示一条无限延伸的道路,"y下"表示这个道路的下限,& ...

  4. 【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'

    问题描述 在使用Azure Function创建新的Python Function时,使用MySQLdb连接数据库时候出现 ModuleNotFoundError: No module named ' ...

  5. Android 安装手机程序有问题/点击runAPP 程序安装不了手机

    可以在 gradle.properties 里添加   android.injected.testOnly=false   点击同步  就可以运行了 如下:

  6. Java 封装性的小练习

    1 package com.bytezero.test2; 2 3 public class Person 4 { 5 private int age; 6 7 public void setAge( ...

  7. C#项目管理引用的dll文件

    这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期使用. 设置dll路径 参考C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁中间的 方法一:配置App.config文件的pri ...

  8. WPF之资源

    目录 WPF对象资源的定义和查找 动态.静态使用资源 向程序添加二进制资源 字符串资源 非字符串资源 使用Pack URI路径访问二进制资源 WPF不但支持程序级的传统资源,同时还推出了独具特色的对象 ...

  9. Kotlin学习快速入门(10)—— 重载运算符使用

    原文:Kotlin学习快速入门(10)-- 重载运算符使用 - Stars-One的杂货小窝 Kotlin中提供了基础的运算符,但是只是针对基础的数据类型,如Int,Double等 如果我们想让两个对 ...

  10. 关于初始化page入参的设计思路

    最近在重构老的代码,在写的过程中发现之前的逻辑如果遇到没有入参pageNo会Npe,于是乎我想找找公司项目有啥方式处理page入参的有两种如下 使用三元表达式直接判断是否null,然后赋值 使用map ...