集合可以描述为保存相同类型数据的对象。集合用于实现不同的数据结构,例如数组,列表,树等。
以下是提供所有集合的详细信息以及头文件和与之关联的迭代器类型的集合:
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 |
集合的分类:
begin() - 成员函数begin()将迭代器返回到向量的第一个元素。
end() - 成员函数end()将迭代器返回到集合的last-the-last元素。
迭代器主要分为五类:
迭代器支持的操作
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()函数。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)