set【STL总结】

之前用STL容器都是看着别人的博客直接学着用的,这次看着手册学一下

begin():返回指向容器第一个元素的指针。由于容器一直都是有序的,所以begin指向的元素是按一定排序标准排序后的第一个元素

iterator begin() noexcept;

end():指向past-the-end元素,即容器最后一个元素后边的一个元素

iterator end() noexcept;

rbegin():反向开头,同std::end()

reverse_iterator rbegin() noexcept;

rend():反向结尾,同std::begin()

 reverse_iterator rend() noexcept;

注意配套的指针

#include<iostream>
#include<set>

using namespace std;

int main(){
	int myints[]={75,23,65,42,13};
	set<int> myset(myints,myints+5);
	for(set<int>::iterator it=myset.begin();it!=myset.end();it++){
		cout<<" "<<*it;
	}
	cout<<endl;
	for(set<int>::reverse_iterator it=myset.rbegin();it!=myset.rend();it++){
		cout<<" "<<*it;
	}
	cout<<endl;
	return 0;
} 

结果为:

clear():清空set的所有元素,使其大小为0

void clear() noexcept;

count( i ):查找set中键值 i 出现的次数,由于set中每个元素都是唯一的,所以最后只会返回0或1,可用来判断 i 是否存在

size_type count (const value_type& val) const;

 

emplace( i ):

 pair<iterator,bool> emplace (Args&&... args)

插入元素。如果插入成功,返回一个pair(first,second),first是一个指向新插入元素的指针,second为true;

若未插入成功,则说明该set已经存在一个和i相等的元素,返回pair(first,second),first为指向与i相等的元素的指针,second为false

#include<iostream>
#include<set>
using namespace std;
int main(){

	set<string> my;
	my.emplace("foo");
	my.emplace("ttt");
	auto ret=my.emplace("foo");
	auto ret2=my.emplace("ccc");
	cout<<ret.second<<endl;
	cout<<ret2.second<<endl;
	return 0;
} 

 empty():判断容器是否为空,若为空返回true,否则返回false

bool empty() const noexcept;

lower_bound(val):返回指向set中第一个大于等于val的元素的指针

iterator lower_bound (const value_type& val);

upper_bound(val):返回指向set中第一个大于val的元素的值的指针

 iterator upper_bound (const value_type& val);

equal_range(val): 返回一对指针,指针的第一个等于lower_bound,第二个等于upper_bound

pair<iterator,iterator>  equal_range (const value_type& val);

erase():从set中移除单个元素或者一个范围内的元素。参数可能是一个位置,一个值,或者一个范围

(1)
iterator  erase (const_iterator position);
(2)
size_type erase (const value_type& val);
(3)
iterator  erase (const_iterator first, const_iterator last); 移除的是[first,last)范围的元素
#include<iostream>
#include<set>

using namespace std;

int main() {
	set<int> myset;
	set<int>::iterator it;

	// insert some values:
	for (int i=1; i<10; i++) myset.insert(i*10);  // 10 20 30 40 50 60 70 80 90

	it = myset.begin();
	++it;                                         // "it" points now to 20

	myset.erase (it);

	myset.erase (40);							// 10 30 50 60 70 80 90
	
	cout << "myset contains:";
	for (it=myset.begin(); it!=myset.end(); ++it)
		cout << ' ' << *it;
	cout << '\n';
	it = myset.find (60);
	myset.erase (it, myset.end());				 //10 30 50

	cout << "myset contains:";
	for (it=myset.begin(); it!=myset.end(); ++it)
		cout << ' ' << *it;
	cout << '\n';

	return 0;
}

find(val):在set中查找等于value的元素,如果找到的话,返回指向这个元素的指针,如果没找到,返回end();  

iterator       find (const value_type& val);

insert(val): 插入一个值为val的元素

single element (1)
pair<iterator,bool> insert (const value_type& val);
pair<iterator,bool> insert (value_type&& val);

insert(positon,val):在给定位置插入一个元素

with hint (2)
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);

insert(first,last):将给定指针中的内容插入到set中

range (3)
template <class InputIterator>
  void insert (InputIterator first, InputIterator last);
#include<iostream>
#include<set>

using namespace std;

int main() {
	set<int> myset;
	set<int>::iterator it;
	pair<std::set<int>::iterator,bool> ret;

	// set some initial values:
	for (int i=1; i<=5; ++i) myset.insert(i*10);    // set: 10 20 30 40 50

	ret = myset.insert(20);               // no new element inserted

	if (ret.second==false) it=ret.first;  // "it" now points to element 20

	myset.insert (it,25);                 // max efficiency inserting
	myset.insert (it,24);                 // max efficiency inserting
	myset.insert (it,26);                 // no max efficiency inserting

	int myints[]= {5,10,15};              // 10 already in set, not inserted
	myset.insert (myints,myints+3);

	std::cout << "myset contains:";
	for (it=myset.begin(); it!=myset.end(); ++it)
		std::cout << ' ' << *it;
	std::cout << '\n';

	return 0;
}

swap(seta):交换两个set的值

int myints[]={12,75,10,32,20,25};
  std::set<int> first (myints,myints+3);     // 10,12,75
  std::set<int> second (myints+3,myints+6);  // 20,25,32

  first.swap(second);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值