C++容器类的简单介绍续(转帖)
2010-11-25 10:44
162 查看
5.unique操作
// list::unique
#include <iostream>
#include <cmath>
#include <list>
using namespace std;
// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }
// a binary predicate implemented as a class:<
pre>class is_near
{
public:
bool operator() (double first, double second)
{ return (fabs(first-second)<5.0); }
};
int main ()
{
double mydoubles[]={ 12.15, 2.72, 73.0, 12.77, 3.14,
12.77, 73.35, 72.25, 15.3, 72.25 };
list<double> mylist (mydoubles,mydoubles+10);
//UNIQUE以前必须要Sort,切记,它的内部实现是I,i+1的方式。
mylist.sort(); // 2.72, 3.14, 12.15, 12.77, 12.77,
// 15.3, 72.25, 72.25, 73.0, 73.35
mylist.unique(); // 2.72, 3.14, 12.15,
12.77
// 15.3, 72.25, 73.0, 73.35
mylist.unique (same_integral_part); // 2.72, 3.14, 12.15
// 15.3, 72.25, 73.0
mylist.unique (is_near()); // 2.72, 12.15, 72.25
cout << "mylist contains:";
for (list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
6.排序操作
sort(); //默认按operator <排序,从小到大
sort(pr); //pr为Functional函数
7.Merge操作
在merge操作前,需要对两个序列都用operator <排序,当然,也可以指定pr排序函数
merge(s2)
merge(s2,pr);
8.reverse()
翻转操作,把整个list翻转
deque的基本操作
一、原型与构造函数
typedef deque<T, allocator<T> > deqObj;
构造函数
deque();
deque(al);
deque(n);
deque(n,x);
deque(n,x,al);
deque(first,last);
deque(first,last,
二、操作
1.resize & clear
使用resize(n)改变大小,使用resize(n, val)如果需要用T(val) 来填满空闲值。
2.clear操作
在clear后调用deqObj.swap(deque<T,A>())是好习惯,而且也一定要这么做。
3.font(),back(),operator [],(如出边界,形为未定)at()(如出边界,抛异常),push_back(),push_front(),pop_back(), pop_front(),insert(iterator it,x),insert(iterator it,n,x),insert(iterator first,iterator last),(插入后指向刚插入的值),erase(it),删除在it指定位置的值,erase(iterator first,iterator last)删除指定区间的值(左闭右开)。这些操作与上面的操作雷同。
Set与multiset的基本操作
一、原型与构造函数
typedef set<Key, less<Key>, allocator<key> > setObj;
构造函数
set(); //空set,按pred()排序
set(pr); //声明一个空的按pr排序的set
set(pr,al); //声明一个按pr排序的集合用al分配
set(first,last)
set(first,last,pr)
set(first,last,pr,al)
操作
1.clear()
2.erase(it); erase(first, last)
3.insert(key),返回值为pair<iterator, bool> 类型,没有与插入元素相同的元素时,second为true,此时first指向新插入的元素。否则为False,first仍指向原来的元素
4.find(key)
5.lower_bound(key)
6.upper_bound(key)
7.equal_range(key),返回一个pair<iterator , iterator >(lower_bound(key), upper_bound(key))
8.count, equal_range的长度
9.key_comp,如果k1排在k2的前面,那么key_comp()(key1,key2)就为true
10.value_comp,对于set<key>对象,它与key_comp一样。
multiset
1.insert,由于insert总能成功,那么它返回的就是新元素的迭代器,而并非pair<iteraor, bool>对象.
2.find返回第一个与key相等的迭代器。
3.equal_range将返回 [0,setObj.size())的任意长度.
4.count()将返回[0,setObj.size())的任意值。
// list::unique
#include <iostream>
#include <cmath>
#include <list>
using namespace std;
// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }
// a binary predicate implemented as a class:<
pre>class is_near
{
public:
bool operator() (double first, double second)
{ return (fabs(first-second)<5.0); }
};
int main ()
{
double mydoubles[]={ 12.15, 2.72, 73.0, 12.77, 3.14,
12.77, 73.35, 72.25, 15.3, 72.25 };
list<double> mylist (mydoubles,mydoubles+10);
//UNIQUE以前必须要Sort,切记,它的内部实现是I,i+1的方式。
mylist.sort(); // 2.72, 3.14, 12.15, 12.77, 12.77,
// 15.3, 72.25, 72.25, 73.0, 73.35
mylist.unique(); // 2.72, 3.14, 12.15,
12.77
// 15.3, 72.25, 73.0, 73.35
mylist.unique (same_integral_part); // 2.72, 3.14, 12.15
// 15.3, 72.25, 73.0
mylist.unique (is_near()); // 2.72, 12.15, 72.25
cout << "mylist contains:";
for (list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
6.排序操作
sort(); //默认按operator <排序,从小到大
sort(pr); //pr为Functional函数
7.Merge操作
在merge操作前,需要对两个序列都用operator <排序,当然,也可以指定pr排序函数
merge(s2)
merge(s2,pr);
8.reverse()
翻转操作,把整个list翻转
deque的基本操作
一、原型与构造函数
typedef deque<T, allocator<T> > deqObj;
构造函数
deque();
deque(al);
deque(n);
deque(n,x);
deque(n,x,al);
deque(first,last);
deque(first,last,
二、操作
1.resize & clear
使用resize(n)改变大小,使用resize(n, val)如果需要用T(val) 来填满空闲值。
2.clear操作
在clear后调用deqObj.swap(deque<T,A>())是好习惯,而且也一定要这么做。
3.font(),back(),operator [],(如出边界,形为未定)at()(如出边界,抛异常),push_back(),push_front(),pop_back(), pop_front(),insert(iterator it,x),insert(iterator it,n,x),insert(iterator first,iterator last),(插入后指向刚插入的值),erase(it),删除在it指定位置的值,erase(iterator first,iterator last)删除指定区间的值(左闭右开)。这些操作与上面的操作雷同。
Set与multiset的基本操作
一、原型与构造函数
typedef set<Key, less<Key>, allocator<key> > setObj;
构造函数
set(); //空set,按pred()排序
set(pr); //声明一个空的按pr排序的set
set(pr,al); //声明一个按pr排序的集合用al分配
set(first,last)
set(first,last,pr)
set(first,last,pr,al)
操作
1.clear()
2.erase(it); erase(first, last)
3.insert(key),返回值为pair<iterator, bool> 类型,没有与插入元素相同的元素时,second为true,此时first指向新插入的元素。否则为False,first仍指向原来的元素
4.find(key)
5.lower_bound(key)
6.upper_bound(key)
7.equal_range(key),返回一个pair<iterator , iterator >(lower_bound(key), upper_bound(key))
8.count, equal_range的长度
9.key_comp,如果k1排在k2的前面,那么key_comp()(key1,key2)就为true
10.value_comp,对于set<key>对象,它与key_comp一样。
multiset
1.insert,由于insert总能成功,那么它返回的就是新元素的迭代器,而并非pair<iteraor, bool>对象.
2.find返回第一个与key相等的迭代器。
3.equal_range将返回 [0,setObj.size())的任意长度.
4.count()将返回[0,setObj.size())的任意值。
相关文章推荐
- C++容器类的简单介绍(转帖)
- 【转帖】C++中对日期和时间的处理的函数简单介绍
- C++容器类的简单介绍
- C++模板简单介绍
- C++ 简单 Hash容器的实现
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
- c++map容器介绍
- C++容器排序算法的简单应用
- c++ 容器类 概括性介绍
- c++中map容器简单功能实现测试附带结构体指针测试
- C++中 map容器的介绍
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- c++积累(1):一个简单的list容器迭代程序
- STL 之 C++ Map容器的简单使用方法
- c++ STL各容器简要介绍(待完善)
- 【c++容器】标准库与boost库中一些容器的介绍
- C++ 容器的综合应用的一个简单实例——文本查询程序
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- C++中malloc和new的区别简单介绍
- C++queue容器介绍