您的位置:首页 > 编程语言 > C语言/C++

C++STL(vector,map,set,list)成员函数整理

2017-04-20 15:28 686 查看
/
*最近ACM比赛,用到的时候忘记成员函数了,贼尴尬,给以后比赛做下准备
*/
LIST:
构造函数
  list<int> c0; //空链表
  list<int> c1(3); //建一个含三个默认值是0的元素的链表
  list<int> c2(5,2); //建一个含五个元素的链表,值都是2
  list<int> c4(c2); //建一个c2的copy链表
  list<int> c5(c1.begin(),c1.end()); ////c5含c1一个区域的元素[_First, _Last)。
成员函数
c.begin()      返回指向链表第一个元素的迭代器。
c.end()        返回指向链表最后一个元素之后的迭代器。
c.rbegin()      返回逆向链表的第一个元素,即c链表的最后一个数据。
c.rend()       返回逆向链表的最后一个元素的下一个位置,即c链表的第一个数据再往前的位置。
operator=      重载赋值运算符。
c.assign(n,num)   将n个num拷贝赋值给链表c。
c.assign(beg,end)  将[beg,end)区间的元素拷贝赋值给链表c。
c.back()        返回链表c的最后一个元素。
c.front()       返回链表c的第一个元素。
c.empty()         判断链表是否为空。
c.size()        返回链表c中实际元素的个数。
c.max_size()     返回链表c可能容纳的最大元素数量。
c.clear()       清除链表c中的所有元素。
c.insert(pos,num)        在pos位置插入元素num。
c.insert(pos,n,num)       在pos位置插入n个元素num。
c.insert(pos,beg,end)     在pos位置插入区间为[beg,end)的元素。
c.erase(pos)          删除pos位置的元素。
c.push_back(num)         在末尾增加一个元素。
c.pop_back()            删除末尾的元素。
c.push_front(num)        在开始位置增加一个元素。
c.pop_front()           删除第一个元素。
resize(n)     从新定义链表的长度,超出原始长度部分用0代替,小于原始部分删除。
resize(n,num)          从新定义链表的长度,超出原始长度部分用num代替。
c1.swap(c2);            将c1和c2交换。
swap(c1,c2);            同上。
c1.merge(c2)            合并2个有序的链表并使之有序,从新放到c1里,释放c2。
c1.merge(c2,comp)        合并2个有序的链表并使之按照自定义规则排序之后从新放到c1中,释放c2。
c1.splice(c1.beg,c2)           将c2连接在c1的beg位置,释放c2
c1.splice(c1.beg,c2,c2.beg)      将c2的beg位置的元素连接到c1的beg位置,并且在c2中施放掉beg位置的元素
c1.splice(c1.beg,c2,c2.beg,c2.end)   将c2的[beg,end)位置的元素连接到c1的beg位置并且释放c2的[beg,end)位置的元素
remove(num)      删除链表中匹配num的元素。
remove_if(comp)    删除条件满足的元素,参数为自定义的回调函数。
reverse()        反转链表
unique()         删除相邻的元素
c.sort()         将链表排序,默认升序
c.sort(comp)     自定义回调函数实现自定义排序
重载运算符
operator==
operator!=
operator<
operator<=
operator>
operator>=

set:
begin()    ,   返回set容器的第一个元素
end()      ,   返回set容器的最后一个元素
clear()    ,    删除set容器中的所有的元素
empty()    ,    判断set容器是否为空
max_size()   ,    返回set容器可能包含的元素最大个数
size()     ,    返回当前set容器中的元素个数
rbegin     ,   返回的值和end()相同
rend()     ,   返回的值和rbegin()相同
count()       用来查找set中某个某个键值出现的次数。这个函数在set并不	                  是很实用,因为一个键值在set只可能出现0或1次,这样就变了                                                                                     判断某一键值是否在set出现过了。
例子:cout<<"set 中 1 出现的次数是 :"<<s.count(1)<<endl;
erase(iterator)  ,  删除定位器iterator指向的值
erase(first,second) ,删除定位器first和second之间的值
erase(key_value),    删除键值key_value的值
find()  ,         返回给定值值得定位器,如果没找到则返回end()。
insert(key_value); key_value插入到set中 ,返回值是pair<set<int>::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。
inset(first,second); 将定位器first到second之间的元素插入到set中,返回值是void.
lower_bound(key_value),返回第一个大于等于key_value的定位器
upper_bound(key_value),返回最后一个大于等于key_value的定位器

vector:
at() 返回指定位置的元素
back() 返回最末一个元素
end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
clear() 清空所有元素
empty() 判断Vector是否为空(返回true时为空)
erase() 删除指定元素
c.erase(beg,end)
front() 返回第一个元素
insert() 插入元素到Vector中
max_size() 返回Vector所能容纳元素的最大数量(上限)
pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素
rbegin() 返回Vector尾部的逆迭代器
rend() 返回Vector起始的逆迭代器
reserve() 设置Vector最小的元素容纳数量
resize() 改变Vector元素数量的大小
size() 返回Vector元素数量的大小
swap() 交换两个Vector

Map:
map的功能
自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
快速插入Key - Value 记录。
快速删除记录
根据Key 修改value记录。
遍历所有记录。
成员变量和成员函数
1. map最基本的构造函数;
map<string , int >mapstring;         map<int ,string >mapint;
map<sring, char>mapstring;         map< char ,string>mapchar;
map<char ,int>mapchar;            map<int ,char >mapint;
2. map添加数据;
map<int ,string> maplive;
1.maplive.insert(pair<int,string>(102,"aclive"));
2.maplive.insert(map<int,string>::value_type(321,"hai"));
3, maplive[112]="April";//map中最简单最常用的插入添加!
3,map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else cout<<"wo find 112"<<endl;
4,map中元素的删除:
如果删除112;
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else  maplive.erase(l_it);  //delete 112;
5,map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
int main( )
{
map <int, int> m1, m2, m3;
map <int, int>::iterator m1_Iter;
m1.insert ( pair <int, int>  ( 1, 10 ) );
m1.insert ( pair <int, int>  ( 2, 20 ) );
m1.insert ( pair <int, int>  ( 3, 30 ) );
m2.insert ( pair <int, int>  ( 10, 100 ) );
m2.insert ( pair <int, int>  ( 20, 200 ) );
m3.insert ( pair <int, int>  ( 30, 300 ) );
cout << "The original map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter->second;
cout   << "." << endl;
// This is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap( m2 );
cout << "After swapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout  << "." << endl;
cout << "After swapping with m2, map m2 is:";
for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout  << "." << endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "After swapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout   << "." << endl;
}
6.map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
7,   map的基本操作函数:
C++ Maps是一种关联式容器,包含“关键字/值”对
begin()         返回指向map头部的迭代器
clear()        删除所有元素
count()         返回指定元素出现的次数
empty()        如果map为空则返回true
end()           返回指向map末尾的迭代器
erase()         删除一个元素
find()           查找一个元素
insert()        插入元素
key_comp() 返回比较元素key的函数
lower_bound()    返回键值>=给定元素的第一个位置
max_size()    返回可以容纳的最大元素个数
rbegin()        返回一个指向map尾部的逆向迭代器
rend()           返回一个指向map头部的逆向迭代器
size()            返回map中元素的个数
swap()           交换两个map
upper_bound()     返回键值>给定元素的第一个位置
value_comp()       返回比较元素value的函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐