目录
一、简介
二、STL概述
2.1STL是什么?
2.2STL的优势
三、容器(Containers)
3.1序列式容器(Sequence Containers)
3.2关联式容器(Associative Containers)
3.3容器适配器(Container Adapters)
四、算法(Algorithms)
4.1常见的算法分类
4.1.1一个使用STL算法对vector进行排序的示例代码
五、迭代器(Iterators)
5.1下面是一个使用迭代器遍历vector的示例代码
六、函数对象(Functors)
6.1下面是一个使用函数对象对vector进行排序的示例代码
七、分配器(Allocators)
7.1下面是一个使用自定义分配器的示例代码
七、STL扩展和补充
上一篇文章链接:
C++ 是一门功能强大的编程语言,它提供了很多工具来实现各种编程任务。在本文中,我们将介绍 C++ 中的三个重要概念:友元、嵌套类和异常。
C++学习笔记——友元、嵌套类、异常-CSDN博客文章浏览阅读20次。友元、嵌套类和异常是 C++ 中三个重要的概念,它们可以提高程序的灵活性、封装性和健壮性。但是,需要注意的是过度使用它们会破坏程序的封装性、增加代码的复杂度和影响程序的性能。因此,在编写程序时,应根据实际情况选择适当的编程技术来提高程序的可读性、可维护性和可靠性。https://blog.csdn.net/m0_62338174/article/details/135573148?spm=1001.2014.3001.5502
C++标准模板库(STL)是C++的一个重要组成部分,它提供了一套丰富的通用数据结构和算法。STL以其高度模块化、可复用的特性,在C++编程中发挥着重要作用。本篇博客将带你深入了解STL,并介绍其常见的组件和使用方法。
C++标准模板库(STL)是C++语言的一个标准库,它提供了一套通用的数据结构和算法,以支持高效的编程。STL的设计目标是使程序员能够以简洁、高效和可复用的方式开发代码。
STL的优势在于其高度模块化和可复用性。它提供了一系列容器、算法和迭代器等组件,这些组件可以独立于特定问题进行开发和测试,并且可以通过简单的组合来解决复杂的问题。此外,STL的算法和数据结构都经过了高度优化,因此在性能方面具有很大优势。
序列式容器是一种线性结构,它按照元素的插入顺序来存储和访问数据。常见的序列式容器包括vector、deque和list等。这些容器提供了灵活的内存管理和高效的元素访问。
关联式容器是一种基于键值对存储和访问数据的数据结构。常见的关联式容器包括set、map和multimap等。这些容器提供了高效的数据检索和排序功能。
容器适配器是一种特殊的容器,它们通过改变底层容器的接口或行为来提供不同的功能。常见的容器适配器有栈(stack)和队列(queue)等。它们通常基于vector或deque实现,提供了特定的数据访问方式。
常用算法概述 STL提供了丰富的算法,涵盖了排序、搜索、变换、合并等各种常见操作。这些算法可以应用于不同的容器,并且具有良好的可组合性和可重用性。
算法分类 STL的算法可以根据其操作对象进行分类。
包括修改序列、非修改序列、排序、堆算法等。
使用STL算法的示例代码 下面是
#include
#include
#include
int main() {
std::vector nums = {5, 2, 9, 1, 7};
// 使用STL算法对vector排序
std::sort(nums.begin(), nums.end());
// 输出排序后的结果
for (const auto& num : nums) {
std::cout << num << " ";
}
return 0;
}
迭代器的作用和分类 迭代器是STL中用于遍历容器元素的工具。它提供了一种统一的访问元素的方式,使得算法可以独立于容器而工作。常见的迭代器类型包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。
迭代器的使用示例
#include
#include
int main() {
std::vector nums = {1, 2, 3, 4, 5};
// 使用迭代器遍历vector并输出元素
for (auto it = nums.begin(); it != nums.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
函数对象的概念和作用 函数对象是一种行为类似函数的对象,它可以被当做函数来调用。在STL中,函数对象通常用于作为算法的参数,用于指定特定的操作。
函数对象的使用示例
#include
#include
#include
struct Compare {
bool operator()(int a, int b) const {
return a > b;
}
};
int main() {
std::vector nums = {5, 2, 9, 1, 7};
// 使用函数对象对vector排序
std::sort(nums.begin(), nums.end(), Compare());
// 输出排序后的结果
for (const auto& num : nums) {
std::cout << num << " ";
}
return 0;
}
分配器的作用和使用方法 分配器用于管理容器的内存分配和释放。STL提供了默认的分配器,但也允许用户自定义分配器以满足特定需求。
自定义分配器的示例代码
#include
#include
#include
template
struct MyAllocator {
using value_type = T;
MyAllocator() = default;
template
MyAllocator(const MyAllocator&) {}
T* allocate(std::size_t n) {
return static_cast(::operator new(n * sizeof(T)));
}
void deallocate(T* p, std::size_t n) {
::operator delete(p);
}
};
int main() {
std::vector> nums(5);
// 输出vector的大小
std::cout << "Size: " << nums.size() << std::endl;
return 0;
}
C++11/14/17对STL的扩展 C++11、C++14和C++17标准对STL进行了扩展,引入了新的容器、算法和功能。例如,C++11引入了移动语义和右值引用,C++14引入了变长模板参数等。
Boost库和其他STL补充 Boost库是一个广泛使用的C++库,它提供了大量的扩展和补充STL的组件,包括智能指针、多线程支持、正则表达式和网络编程等。除此之外,还有其他第三方库也提供了对STL的补充和增强功能。
STL是C++中一个强大而灵活的工具,它提供了一套丰富的容器、算法和迭代器等组件,可以大大简化C++程序的开发过程。通过学习STL的使用方法和特性,我们可以更加高效地编写可靠、可维护的C++代码。希望本篇博客能够为读者提供有关STL的全面介绍和实践指导,以帮助读者充分发挥STL在项目中的作用。