ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STL_set容器

2021-10-25 23:33:49  阅读:137  来源: 互联网

标签:返回 容器 set const 迭代 STL 元素


  ↵

1 介绍

  • 存储键值相同的关联式容器。
  • 自动排序

特点:

  1. set存储的元素值可以修改(正常情况,用户无法修改set容器中的值)。(set中的存储类型未用const修饰。
  2. 未提供at()函数。
  3. 无操作符“[]”的重载。
  4. 为双向迭代器,运算操作与其相同。
  5. 与map不同,set使用"*"可以获取元素的值。(value = *iter)

2 创建方式

  1. set<dataType> name;        // 创建一个空的容器
  2. set<dataType> name{value1, value2, value3...};       //创建容器时初始化
  3. set<dataType> name(set1);      // 将set1容器中的所有元素复制到新set容器中。(set容器中有拷贝构造函数)
  4. set<dataType> name(set());     // 使用set函数返回一个临时容器对set容器初始化(C++11中新增了移动构造函数)
  5. set<dataType>name([first, last]);    // 将迭代器范围在[first, last) 中的元素复制到s2。

3 成员方法

表 1 C++ set 容器常用成员方法

成员方法功能
begin()返回指向容器中第一个(注意,是已排好序的第一个)元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
end()返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
rbegin()返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
rend()返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
cbegin()和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。
cend()和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。
crbegin()和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。
crend()和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。
find(val)在 set 容器中查找值为 val 的元素,如果成功找到,则返回指向该元素的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
lower_bound(val)返回一个指向当前 set 容器中第一个大于或等于 val 的元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
upper_bound(val)返回一个指向当前 set 容器中第一个大于 val 的元素的迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
equal_range(val)该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.second 和 upper_bound() 方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含的值为 val 的元素(set 容器中各个元素是唯一的,因此该范围最多包含一个元素)。
empty()若容器为空,则返回 true;否则 false。
size()返回当前 set 容器中存有元素的个数。
max_size()返回 set 容器所能容纳元素的最大个数,不同的操作系统,其返回值亦不相同。
insert()向 set 容器中插入元素。
erase()删除 set 容器中存储的元素。
swap()交换 2 个 set 容器中存储的所有元素。这意味着,操作的 2 个 set 容器的类型必须相同。
clear()清空 set 容器中所有的元素,即令 set 容器的 size() 为 0。
emplace()在当前 set 容器中的指定位置直接构造新元素。其效果和 insert() 一样,但效率更高。
emplace_hint()在本质上和 emplace() 在 set 容器中构造新元素的方式是一样的,不同之处在于,使用者必须为该方法提供一个指示新元素生成位置的迭代器,并作为该方法的第一个参数。
count(val)

在当前 set 容器中,查找值为 val 的元素的个数,并返回。注意,由于 set 容器中各元素的值是唯一的,因此该函数的返回值最大为 1。

4 查找元素方式

(1)find

(2)lower_bound()

(3)upper_bound()

(4)equal_range()

equal_range(val) 函数的返回值是一个 pair 类型数据,其包含 2 个迭代器,表示 set 容器中和指定参数 val 相等的元素所在的区域,但由于 set 容器中存储的元素各不相等,因此该函数返回的这 2 个迭代器所表示的范围中,最多只会包含 1 个元素

5 插入元素

(1)insert函数

返回值为:pair类型(一个指向添加元素的迭代器,另一个未bool类型的操作成功标志)。

若set中已经存在相同类型的元素值,迭代器指向该元素,另操作标志未false。

(2)implace

(3)impalce_hint

(4)emplace

使用emplace时,只需要传入构建新元素的数据。

返回值同insert一样为pair类型。

例如:

set<dataType> name;

//向 set容器中添加元素

pair<set<dataType, dataType>::iterator, bool> ret = name.emplace(value);// *(ret.first) = value, ret.second = true/false

(5)emplace_hint

6 删除元素

(1)erase

返回值为删除的元素个数。

(2)clear

标签:返回,容器,set,const,迭代,STL,元素
来源: https://blog.csdn.net/weixin_42542290/article/details/120962158

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有