C++ STL组件

C++ STL组件 首页 / C++入门教程 / C++ STL组件

集合可以描述为保存相同类型数据的对象。集合用于实现不同的数据结构,例如数组,列表,树等。

以下是提供所有集合的详细信息以及头文件和与之关联的迭代器类型的集合:

Container Description Header file iterator
vector vector是创建动态数组的类,该数组允许在后面插入和删除。 <vector> Random access
list list是允许从任何位置插入和删除的列表。 <list> Bidirectional
deque 双端队列是双端队列,它允许从两端插入和删除。 <deque> Random access
set set是用于存储唯一的集合。 <set> Bidirectional
multiset 多集是用于存储非唯一集合。 <set> Bidirectional
map Map是用于存储唯一键值对的集合,即每个键仅与一个值相关联。 <map> Bidirectional
multimap multimap是用于存储键值对的集合,每个键可以与多个值相关联。 <map> Bidirectional
stack 后进先出(LIFO) <stack> No iterator
queue 先进先出(FIFO) <queue> No iterator
Priority-queue 优先元素始终是最高优先级元素。 <queue> No iterator

集合的分类:

  • 序列集合
  • 关联集合
  • 衍生集合
STL COMPONENTS

Note :每个集合类都包含一组可用于操作内容的函数。

迭代器

  • 迭代器是类似指针的实体,用于访问集合中的各个元素。
  • 迭代器从一个元素顺序移动到另一个元素。此过程称为遍历集合。
STL COMPONENTS
  • 迭代器主要包含两个函数:

begin()     -  成员函数begin()将迭代器返回到向量的第一个元素。

end()         -  成员函数end()将迭代器返回到集合的last-the-last元素。

STL COMPONENTS

迭代器类别

迭代器主要分为五类:

STL COMPONENTS
  1. Input iterator:
    • Input迭代器是允许程序从集合读取值的迭代器。
    • 取消引用输入迭代器可以使我们从集合中读取值,但不会更改该值。
    • 输入迭代器是单向迭代器。
    • 输入迭代器可以递增,但不能递减。
  2. Output iterator:
    • 输出迭代器与输入迭代器类似,不同之处在于它允许程序修改集合的值,但不允许读取它。
    • 这是一个单向迭代器。
    • 这是一个只写迭代器。
  3. Forward iterator:
    • 转发迭代器使用++运算符浏览集合。
    • 转发迭代器一次遍历集合的每个元素,一次遍历一个元素。
  4. Bidirectional iterator:
    • 双向迭代器与正向迭代器相似,不同之处在于它也向后移动。
    • 这是一种双向迭代器。
    • 可以递增或递减。
  5. Random Access Iterator:
    • 随机访问迭代器可用于访问集合的随机元素。
    • 随机访问迭代器具有双向迭代器的所有函数,并且还具有另一个附加函数,即指针添加。通过指针添加操作,我们可以访问集合的随机元素。

迭代器支持的操作

iterator Element access Read Write Increment operation Comparison
input -> v = *p ++ ==,!=
output *p = v ++
forward -> v = *p *p = v ++ ==,!=
Bidirectional -> v = *p *p = v ++,-- ==,!=
Random access ->,[ ] v = *p *p = v ++,--,+,-,+=,--= ==,!=,<,>,<=,>=

函数对象

Function对象是包装在类中的函数,因此它看起来像一个对象。函数对象通过使用面向对象(例如通用编程)的函数扩展了常规函数的特性。因此,可以说函数对象是一个智能指针,它比普通函数具有许多优势。

无涯教程网

以下是函数对象相对于常规函数的优点:

  • 函数对象可以具有成员函数以及成员属性。
  • 可以在使用函数对象之前对其进行初始化。
  • 仅当语法不同时,常规函数才可以具有不同的类型。即使语法相同,函数对象也可以具有不同的类型。
  • 函数对象比常规函数要快。

假设" d"是一个类的对象,operator()函数可以称为:

d();

which is same as:

d.operator() ( );

让我们看一个简单的示例:

#include <iostream>
using namespace std;
class function_object
{
         public:
        int operator()(int a, int b)            
       {
           return a+b;
       }
};

int main()
{
       function_object f;               
       int result = f(5,5);
      cout<<"Addition of a and b is : "<<result;

    return 0;
}

输出:

Addition of a and b is : 10

在上面的示例中," f"是function_object类的一个对象,其中包含operator()函数的定义。因此," f"可用作普通函数来调用operator()函数。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

玩转Git三剑客 -〔苏玲〕

Go语言从入门到实战 -〔蔡超〕

从0开发一款iOS App -〔朱德权〕

Swift核心技术与实战 -〔张杰〕

安全攻防技能30讲 -〔何为舟〕

接口测试入门课 -〔陈磊〕

性能优化高手课 -〔尉刚强〕

林外 · 专利写作第一课 -〔林外〕

手把手带你写一个 MiniTomcat -〔郭屹〕

好记忆不如烂笔头。留下您的足迹吧 :)