C++常用基础知识—STL库(2)

简介: C++常用基础知识—STL库(2)

后续来了!!!!

  1. C++ Deque(双向队列)
  2. 关联容器
    2.1 C++ Sets & MultiSets
    2.2 C++ Maps & MultiMaps
  3. 容器适配器
    3.1 C++ Stacks(堆栈)
    3.2 C++ Queues(队列)
    3.3 C++ Priority Queues(优先队列)
  4. 迭代器

1 C++ Deque(双向队列)

允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。

** 1.Constructors 创建一个新双向队列**

语法:

deque();//创建一个空双向队列
deque( size_type size );// 创建一个大小为size的双向队列
deque( size_type num, const TYPE &val ); //放置num个val的拷贝到队列中
deque( const deque &from );// 从from创建一个内容一样的双向队列
deque( input_iterator start, input_iterator end );
// start 和 end - 创建一个队列,保存从start到end的元素。

2.Operators 比较和赋值双向队列

//可以使用[]操作符访问双向队列中单个的元素

3.assign() 设置双向队列的值

语法:

void assign( input_iterator start, input_iterator end);
//start和end指示的范围为双向队列赋值
void assign( Size num, const TYPE &val );//设置成num个val。

4.at() 返回指定的元素

语法:

reference at( size_type pos ); 返回一个引用,指向双向队列中位置pos上的元素

5.back() 返回最后一个元素

语法:

reference back();//返回一个引用,指向双向队列中最后一个元素

6.begin() 返回指向第一个元素的迭代器

语法:

iterator begin();//返回一个迭代器,指向双向队列的第一个元素

7.clear() 删除所有元素

8.empty() 返回真如果双向队列为空

9.end() 返回指向尾部的迭代器

10.erase() 删除一个元素

语法:

iterator erase( iterator pos ); //删除pos位置上的元素
iterator erase( iterator start, iterator end ); //删除start和end之间的所有元素
//返回指向被删除元素的后一个元素

11.front() 返回第一个元素的引用

12.get_allocator() 返回双向队列的配置器

13.insert() 插入一个元素到双向队列中

语法:

iterator insert( iterator pos, size_type num, const TYPE &val ); //pos前插入num个val值
void insert( iterator pos, input_iterator start, input_iterator end );
//插入从start到end范围内的元素到pos前面

14.max_size() 返回双向队列能容纳的最大元素个数

15.pop_back() 删除尾部的元素
16.pop_front() 删除头部的元素
17.push_back() 在尾部加入一个元素
18.push_front() 在头部加入一个元素
19.rbegin() 返回指向尾部的逆向迭代器
20.rend() 返回指向头部的逆向迭代器
21.resize() 改变双向队列的大小
22.size() 返回双向队列中元素的个数

23.swap() 和另一个双向队列交换元素

语法:

void swap( deque &target );// 交换target和现双向队列中元素

2 关联容器

2.1 C++ Sets & MultiSets

集合(Set)是一种包含已排序对象的关联容器。多元集合(MultiSets)和集合(Sets)相像,只不过支持重复对象,其用法与set基本相同。

1.begin() 返回指向第一个元素的迭代器

2.clear() 清除所有元素

3.count() 返回某个值元素的个数

4.empty() 如果集合为空,返回true
5.end() 返回指向最后一个元素的迭代器

6.equal_range() 返回第一个>=关键字的迭代器和>关键字的迭代器

语法:

pair <iterator,iterator>equal_range( const key_type &key );
//key是用于排序的关键字
Set<int> ctr;

例如:

Pair<set<int>::iterator,set<int>::iterarot>p;
For(i=0;i<=5;i++) ctr.insert(i); P=ctr.equal_range(2);

那么*p.first2;*p.second3;

7.erase() 删除集合中的元素

语法:

iterator erase( iterator i ); //删除i位置元素
iterator erase( iterator start, iterator end );
//删除从start开始到end(end为第一个不被删除的值)结束的元素
size_type erase( const key_type &key );
//删除等于key值的所有元素(返回被删除的元素的个数)
//前两个返回第一个不被删除的双向定位器,不存在返回末尾
//第三个返回删除个数

8.find() 返回一个指向被查找到元素的迭代器

语法:

iterator find( const key_type &key );
//查找等于key值的元素,并返回指向该元素的迭代器;
//如果没有找到,返回指向集合最后一个元素的迭代器

9.get_allocator() 返回集合的分配器

10.insert() 在集合中插入元素

语法:

iterator insert( iterator i, const TYPE &val ); //在迭代器i前插入val
void insert( input_iterator start, input_iterator end );
//将迭代器start开始到end(end不被插入)结束返回内的元素插入到集合中
pair insert( const TYPE &val );
//插入val元素,返回指向该元素的迭代器和一个布尔值来说明val是否成功被插入
//应该注意的是在集合(Sets中不能插入两个相同的元素)

11.lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器

语法:

iterator lower_bound( const key_type &key );
//返回一个指向大于或者等于key值的第一个元素的迭代器

12.key_comp() 返回一个用于元素间值比较的函数

语法:

key_compare key_comp();
//返回一个用于元素间值比较的函数对象

13.max_size() 返回集合能容纳的元素的最大限值
14.rbegin() 返回指向集合中最后一个元素的反向迭代器

示例:

Set<int> ctr; Set<int>::reverse_iterator rcp; For(rcp=ctr.rbegin();rcp!=ctr.rend();rcp++) Cout<<*rcp<<” ”;

15.rend() 返回指向集合中第一个元素的反向迭代器
16.size() 集合中元素的数目

17.swap() 交换两个集合变量

语法:

void swap( set &object );//交换当前集合和object集合中的元素

18.upper_bound() 返回大于某个值元素的迭代器

语法:

iterator upwer_bound( const key_type &key );
//返回一个指向大于key值的第一个元素的迭代器

19.value_comp() 返回一个用于比较元素间的值的函数

语法:

iterator upper_bound( const key_type &key );//返回一个用于比较元素间的值的函数对象

2.2 C++ Maps & MultiMaps

C++ Maps是一种关联式容器,包含“关键字/值”对。

C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素。

1.begin() 返回指向map头部的迭代器

2.clear() 删除所有元素

3.count() 返回指定元素出现的次数

语法:

size_type count( const KEY_TYPE &key );
//返回map中键值等于key的元素的个数

4.empty() 如果map为空则返回true
5.end() 返回指向map末尾的迭代器

6.equal_range() 返回特殊条目的迭代器对

语法:

pair equal_range( const KEY_TYPE &key );

返回两个迭代器,指向第一个键值为key的元素和指向最后一个键值为key的元素

7.erase() 删除一个元素

语法:

void erase( iterator i ); //删除i元素
void erase( iterator start, iterator end ); //删除从start开始到end(不包括end)结束的元素
size_type erase( const key_type &key );
//删除等于key值的所有元素(返回被删除的元素的个数)

8.find() 查找一个元素

语法:

iterator find( const key_type &key );
//查找等于key值的元素,并返回指向该元素的迭代器;
//如果没有找到,返回指向集合最后一个元素的迭代器.

9.get_allocator() 返回map的配置器

10.insert() 插入元素

语法:

iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val );
//插入val到pos的后面,然后返回一个指向这个元素的迭代器
void insert( input_iterator start, input_iterator end );
//插入start到end的元素到map中
pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val );
//只有在val不存在时插入val。返回指向被插入元素的迭代器和描述是否插入的bool值

11.key_comp() 返回比较元素key的函数

语法:

key_compare key_comp();
//返回一个用于元素间值比较的函数对象

12.lower_bound() 返回键值>=给定元素的第一个位置

语法:

iterator lower_bound( const key_type &key );
//返回一个指向大于或者等于key值的第一个元素的迭代器

13.max_size() 返回可以容纳的最大元素个数
14.rbegin() 返回一个指向map尾部的逆向迭代器
15.rend() 返回一个指向map头部的逆向迭代器
16.size() 返回map中元素的个数

17.swap() 交换两个map

语法:

void swap( map &obj );
//swap()交换obj和现map中的元素

18.upper_bound() 返回键值>给定元素的第一个位置

语法:

iterator upwer_bound( const key_type &key );
//返回一个指向大于key值的第一个元素的迭代器

19.value_comp() 返回比较元素value的函数

语法:

value_compare value_comp();
//返回一个用于比较元素value的函数

3. 容器适配器

3.1 C++ Stacks(堆栈)

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,也就是说实现了一个先进后出(FILO)的数据结构。

1.empty() 堆栈为空则返回真
2.pop() 移除栈顶元素
3.push() 在栈顶增加元素
4.size() 返回栈中元素数目
5.top() 返回栈顶元素

3.2 C++ Queues(队列)

C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。

1.back() 返回一个引用,指向最后一个元素
2.empty() 如果队列空则返回真
3.front() 返回第一个元素
4.pop() 删除第一个元素
5.push() 在末尾加入一个元素
6.size() 返回队列中元素的个数

3.3 C++ Priority Queues(优先队列)

C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排列有序。

1.empty() 如果优先队列为空,则返回真
2.pop() 删除第一个元素
3.push() 加入一个元素
4.size() 返回优先队列中拥有的元素的个数
5.top() 返回优先队列中有最高优先级的元素

4 迭代器

迭代器使开发人员不必整个实现类接口。只需提供一个迭代器,即可遍历类

中的数据结构,可被用来访问一个容器类的所包函的全部元素,其行为像一个指

针,但是只可被进行增加(++)或减少(–)操作。举一个例子,你可用一个迭代器

来实现对vector容器中所含元素的遍历。

如下代码对vector容器对象生成和使用了迭代器:

vector<int> the_vector; vector<int>::iterator the_iterator; for( int i=0; i < 10; i++ ) the_vector.push_back(i); int total = 0; the_iterator = the_vector.begin(); while( the_iterator != the_vector.end() ) { total += *the_iterator; the_iterator++; }cout << "Total=" << total << endl;

提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素

创作不易,且行且珍惜,谢谢大家

目录
相关文章
|
2月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
82 6
|
7天前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
22 7
|
25天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
49 4
|
26天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
56 5
|
26天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
42 2
|
1月前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
50 0
|
10天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
21 0
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
74 1
|
2月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
45 0
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
84 5