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;

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

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

目录
相关文章
|
14天前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
71 10
|
14天前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
32 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
1天前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
14 6
|
1天前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
7 1
|
10天前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)
|
14天前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
35 5
|
14天前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
35 2
|
3天前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
6 0
|
10天前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
10天前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)