STL 简单知识点

STL 简单知识点


    对STL一些需要总体大概了解的知识点进行说明

一、术语对照表

二、六大组件

1.容器

2.算法

3.迭代器

4.仿函数

5.配置器

6.配接器

三、配置器

1.什么是配置器

    在STL源码详解的书中对配置器的解释都是空间配置器,其主要的作用就是内存空间的分配,其具体的内容没有详细研究

四、迭代器

1.迭代器、算法、容器之间的关系

    迭代器是算法和容器之间的桥梁,STL的思想是把数据结构和算法分开,但分开以后算法对于容器内的操作就不方便了,所以就需要迭代器来做为他们两之间的桥梁,使算法能对容器进行操作

2.迭代器的类型

  • 1.值类型
  • 2.引用类型
  • 3.指针类型
  • 4.距离类型
  • 5.iterator_catogory类型:对其不是太懂

五、配接器

1.什么是配接器

    配接器的作用是使原本不兼容的对象可以一起运行,扮演轴承和转换器的作用

2.配接器的分类

  • 1.应用于容器:stack和queue底层有deque
  • 2.应用于迭代器:对于迭代器的赋值、反转
  • 3.应用于仿函数
### C++ STL 核心知识点总结 #### 1. 容器(Containers) 容器是STL的核心组件之一,用于存储和管理数据。它们分为三类:序列式容器、关联式容器以及无序关联式容器。 - **序列式容器** 序列式容器按照元素插入顺序保存数据,常见的有`std::vector`, `std::deque`, 和`std::list`。其中`std::vector`是最常用的动态数组实现[^3]。 - **关联式容器** 关联式容器通过键值对来组织数据,支持快速查找操作,如`std::set`, `std::map`, `std::multiset`, 和`std::multimap`。这些容器内部通常基于平衡二叉树实现。 - **无序关联式容器** 这些容器利用哈希表实现高效的数据访问,包括`std::unordered_set`, `std::unordered_map`, `std::unordered_multiset`, 和`std::unordered_multimap`[^1]。 --- #### 2. 算法(Algorithms) STL提供了丰富的通用算法集合,涵盖了排序、搜索、数值计算等多个方面。以下是几个重要的算法类别: - **排序与搜索** - 排序函数如`std::sort()`能够对任意范围内的元素进行排序。 - 查找功能由`std::find()`, `std::binary_search()`等提供。 - **修改型算法** - 修改型算法会改变输入序列的内容,比如`std::transform()`, `std::replace_if()`等。 - **非修改型算法** - 非修改型算法不会更改原始数据,而是返回某种结果,例如`std::count()`, `std::accumulate()`等。 --- #### 3. 迭代器(Iterators) 迭代器充当连接容器和算法之间的桥梁角色。它可以看作是指针的一种泛化形式,允许遍历不同类型的容器中的元素。 - 基本分类包括输入迭代器、输出迭代器、前向迭代器、双向迭代器以及随机存取迭代器。 - 使用示例: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4}; for(auto it = vec.begin(); it != vec.end(); ++it){ std::cout << *it << ' '; } } ``` --- #### 4. 函数对象(Function Objects 或 Functors) 函数对象是一种重载了括号运算符的类实例,使得其行为类似于函数调用。这在STL中广泛应用于自定义比较逻辑或者作为回调机制的一部分。 - 示例代码如下所示: ```cpp struct IsEven{ bool operator()(const int& value)const{return !(value%2);} }; void testFunctor(){ std::vector<int> numbers={1,2,3,4,5,6}; auto result=std::remove_if(numbers.begin(),numbers.end(),IsEven()); //... } ``` 上述例子展示了如何创建并应用简单的谓词functor来进行条件过滤。 --- #### 5. 内存分配(Memory Management) 虽然大多数时候我们不需要直接关心内存管理细节,因为很多高级抽象已经帮我们处理好了这些问题;但是理解底层原理仍然很重要。特别是当涉及到性能优化时更是如此。 - 动态内存分配可以通过new/delete完成,而智能指针则进一步简化资源释放过程,减少潜在错误风险。 - 参考资料提到过关于文件流的操作差异也属于此类讨论范畴内[^4]。 --- #### 总结 以上只是对C++ STL核心概念的一个概括介绍,并未深入探讨每一个具体话题下的全部细节。学习过程中建议结合实际项目需逐步掌握各个组成部分的具体用途及其最佳实践方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值