C++ STL set insert()方法详解
为满足不同场景的需要,C++ 11 标准的 set 类模板中提供了多种不同语法格式的 insert() 成员方法,它们各自的功能和用法如下所示。
1) 只要给定目标元素的值,insert() 方法即可将该元素添加到 set 容器中,其语法格式如下:
//普通引用方式传参
pair<iterator,bool> insert (const value_type& val);
//右值引用方式传参
pair<iterator,bool> insert (value_type&& val);
其中,val 表示要添加的新元素,该方法的返回值为 pair 类型。
以上 2 种格式的区别仅在于传递参数的方式不同,即种采用普通引用的方式传参,而第二种采用右值引用的方式传参。右值引用为 C++ 11 新添加的一种引用方式,可阅读《C++ 右值引用》一详细了解。
可以看到,以上 2 种语法格式的 insert() 方法,返回的都是 pair 类型的值,其包含 2 个数据,一个迭代器和一个 bool 值:
当向 set 容器添加元素成功时,该迭代器指向 set 容器新添加的元素,bool 类型的值为 true;
如果添加失败,即证明原 set 容器中已存有相同的元素,此时返回的迭代器就指向容器中相同的此元素,同时 bool 类型的值为 false。
举个例子:
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化set容器
std::set<std::string> myset;
//准备接受 insert() 的返回值
pair<set<string>::iterator, bool> retpair;
//采用普通引用传值方式
string str = "http://c.biancheng网站站点" rel="nofollow" />
iter->http://c.biancheng网站站点" rel="nofollow" /> //以普通引用的方式传递 val 值
iterator insert (const_iterator position, const value_type& val);
//以右值引用的方式传递 val 值iterator insert (const_iterator position, value_type&& val);
以上 2 种语法格式中,insert() 函数的返回值为迭代器:
当向 set 容器添加元素成功时,该迭代器指向容器中新添加的元素;
当添加失败时,证明原 set 容器中已有相同的元素,该迭代器就指向 set 容器中相同的这个元素。
举个例子:
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化set容器
std::set<std::string> myset;
//准备接受 insert() 的返回值
set<string>::iterator iter;
//采用普通引用传值方式
string str = "http://c.biancheng网站站点" rel="nofollow" />
myset size =1 myset size =2
注意,使用 insert() 方法将目标元素插入到 set 容器指定位置后,如果该元素破坏了容器内部的有序状态,set 容器还会自行对新元素的位置做进一步调整。也就是说,insert() 方法中指定新元素插入的位置,并不一定就是该元素最终所处的位置。
3) insert() 方法支持向当前 set 容器中插入其它 set 容器指定区域内的所有元素,只要这 2 个 set 容器存储的元素类型相同即可。insert() 方法的语法格式如下:
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
其中 first 和 last 都是迭代器,它们的组 [first,last) 可以表示另一 set 容器中的一块区域,该区域包括 first 迭代器指向的元素,但不包含 last 迭代器指向的元素。举个例子:
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化set容器
std::set<std::string> myset{ "http://c.biancheng网站站点" rel="nofollow" />
其中,Ei 表示新添加的元素。http://c.biancheng网站站点" rel="nofollow" /> void insert ( {E1, E2,...,En} ); 举个例子:
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化set容器
std::set<std::string> myset;
//向 myset 中添加多个元素
myset.insert({ "http://c.biancheng网站站点" rel="nofollow" />
http://c.biancheng网站站点" rel="nofollow" />
- 随机文章
- 马尔代夫色考(马尔代夫:不只是一个性感度假胜地)
- 七彩 马尔代夫(色彩斑斓的马尔代夫)
- 深圳 马尔代夫 特价(深圳出发,马尔代夫五星度假村特价优惠!)
- 中国也有马尔代夫(中国涌现马尔代夫,旅游热点逐渐受宠)
- 马尔代夫好的代理(马尔代夫出色代理:预订旅程轻松愉快!)
- 阿杜 马尔代夫(阿杜感受马尔代夫风情)
- 微商马尔代夫旅游(微商又出发!马尔代夫游,美景如画!)
- 广西网红马尔代夫(广西打卡马尔代夫,网红们争相前往!)
- 在马尔代夫的厨师(厨技超群,指尖上的马尔代夫风味美食)
- 橘色马尔代夫图片(美丽马尔代夫:橘色天空下的热带岛屿)
- 抚州马尔代夫签证(抚州游客可线上申请马尔代夫入境许可)
- 水城马尔代夫在哪(水城马尔代夫:探索马尔代夫美丽城市)
- 从上海到马尔代夫(上海直飞马尔代夫,实现海滩度假之梦)
- 武汉马尔代夫游玩(玩转武汉马尔代夫,畅享热带度假风情)
- 马尔代夫马累费用(探寻马尔代夫首都马累旅游费用攻略)
- 想去马尔代夫骑行(马尔代夫自行车探险,你准备好了吗?)
- 疫情马尔代夫国家(疫情严峻!马尔代夫全境实行封锁管制)
- 游泳 马尔代夫(马尔代夫的海洋探险:畅游蓝色海洋)
- 江门马尔代夫旅游(江门到马尔代夫旅游攻略,必看推荐!)
- 水屋 马尔代夫(体验马尔代夫度假,住进水上别墅)
- 疫情马尔代夫入境(马尔代夫开放入境,实行新冠病毒检测)
- 海航马尔代夫防疫(海航积极应对疫情,保障马尔代夫安全)
- 澳门马尔代夫酒店(澳门马尔代夫酒店:奢华美景尽收眼底)
- 针对疫情马尔代夫(马尔代夫疫情严峻,多项防控措施加强)
- 韩国打平马尔代夫(韩国与马尔代夫战平,双方均未能进球)
- 马尔代夫中国出手(中国帮助马尔代夫重建、加强基础设施)
- 马尔代夫中文媒体(马尔代夫宣布恢复中日韩游客签证服务)
- 迪拜马尔代夫多远(后的新为:从迪拜到马尔代夫有多远?)
- 洪州 马尔代夫(江西洪州旅游局与马尔代夫展开旅游交流合作)
- 辉县 马尔代夫(河南辉县客家村打造马尔代夫风情旅游新景观)
