- 浏览: 502767 次
- 性别:
- 来自: 惠州
文章分类
- 全部博客 (255)
- ant (1)
- springMVC (2)
- ajax (4)
- oracle (12)
- SSH (13)
- struts1 (2)
- Hibernate (14)
- spring (5)
- jstl (1)
- 连接池 (1)
- acegi (4)
- java (17)
- jquery (11)
- div+css (4)
- drupal (1)
- php (8)
- freemaker调模板生成静态页面 (1)
- xml (1)
- json (2)
- javascript (9)
- 正则表达式 (4)
- Ext (8)
- jdbc (1)
- sql server (2)
- perl (5)
- db4o (1)
- webservice (4)
- flex (13)
- it资讯 (1)
- joomla (0)
- 设计模式 (1)
- struts2 (4)
- s2sh (8)
- linux (3)
- ejb (2)
- android旅途 (24)
- android (36)
- C/C++ (16)
- mysql (1)
最新评论
-
fengyuxing168:
IBelyService bs = IBelyService. ...
为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取 -
dengzhangtao:
"由于ActivityManagerService是 ...
binder理解 -
yzyspy:
ActivityManagerService:startHom ...
Android的Launcher成为系统中第一个启动的,也是唯一的 -
Matchstick:
使用SELECT DISTINCT alias FROM Po ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题 -
dlheart:
没看懂你什么意思啊,我遇到的问题是一对多,设了fetch = ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题
STL 中的" 集合类" 的定义使用
#include <set>
#include <iostream>
using namespace std;
typedef set <double, less <double> , allocator
<double> > set_type;
ostream& operator < <(ostream& out, const
set_type& s)
{
copy(s.begin(), s.end(),ostream_iterator
<set_type::value_type,char> (cout, " "));
return out;
}
int main(void)
{
// create a set of doubles
set_type sd;
int i;
for (i = 0; i < 10; ++i)
{
// insert values
sd.insert(i);
}
// print out the set
cout < < sd < < endl < <
endl;
// now let’s erase half of the
elements in the set
int half = sd.size() > > 1;
set_type::iterator sdi = sd.begin();
advance(sdi,half);
sd.erase(sd.begin(),sdi);
// print it out again
cout < < sd < < endl < <
endl;
// Make another set and an empty
result set
set_type sd2, sdResult;
for (i = 1; i < 9; i++)
sd2.insert(i+5);
cout < < sd2 < < endl;
// Try a couple of set algorithms
set_union(sd.begin(),sd.end(),sd2.begin(),sd2.end(),
inserter(sdResult,sdResult.begin()));
cout < < "Union: " < < endl
< < sdResult < < endl;
sdResult.erase(sdResult.begin(),sdResult.end());
set_intersection(sd.begin(),sd.end(),
sd2.begin(),sd2.end(),
inserter(sdResult,sdResult.begin()));
cout < < "Intersection: " < <
endl < < sdResult < < endl;
return 0;
}
Program Output
0 1 2 3 4 5 6 7 8
9
5 6 7 8 9
6 7 8 9 10 11 12 13
Union:
5 6 7 8 9 10 11 12 13
Intersection:
6 7 8 9
#include <iostream>
#include <set>
using namespace std;
int main(int argc, char* argv[])
{
set <int>
myset;
for(int i=1;i
<=10;i++)
myset.insert(i);
set <int>
::iterator it;
for(it=myset.begin();it!=myset.end();++it)
cout < <*it;
return 0;
}
C++ Sets(集合)
set和map一样属于关联容器,set是集合,map是映射。若元素类型为int,double,string就会自动进行(默认是升序)排序(使用平衡二叉树来实现),使用自定义类型而未定义比较运算符就不能自动排序了。set容器不支持随机访问。
函数列表:
begin()返回指向第一个元素的迭代器
clear()清除所有元素
count()返回某个值元素的个数
empty()如果集合为空,返回true
end()返回指向最后一个元素的迭代器
equal_range()返回集合中与给定值相等的上下限的两个迭代器
erase()删除集合中的元素
find()返回一个指向被查找到元素的迭代器
get_allocator()返回集合的分配器
insert()在集合中插入元素
lower_bound()返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()返回一个用于元素间值比较的函数
max_size()返回集合能容纳的元素的最大限值
rbegin()返回指向集合中最后一个元素的反向迭代器
rend()返回指向集合中第一个元素的反向迭代器
size()集合中元素的数目
swap()交换两个集合变量
upper_bound()返回大于某个值元素的迭代器
value_comp()返回一个用于比较元素间的值的函数
////////////////////////////////////////////////////////////////////////////////////
构造函数
explicit set(const Pred& comp = Pred(), const A& al = A());
set(const set& x);
set(const value_type *first, const value_type *last,
const Pred& comp = Pred(), const A& al = A());
实际中可能使用的形式:
1.set c 定一一个空的set对象。
2.set c(op) 定一一个空的set对象,指定排序规则。
3.set c(set& other) 定义一个set对象,拷贝所有的other元素到c中。
4.set c(begin, end, op) 定义一个set对象,拷贝所有的从begin到end的元素到c中,并指定op进行排队。
5.set c(begin, end) 定义一个set对应,初始化c从begin到end。
begin
语法:
iterator begin();
返回指向当前集合中第一个元素的迭代器。
clear
语法:
void clear();
清除当前集合中的所有元素。
count
语法:
size_type count( const key_type &key );
返回当前集合中出现的某个值的元素的数目。
empty
语法:
bool empty();
如果当前集合为空,返回true;否则返回false。
end
语法:
const_iterator end();
返回指向当前集合中最后一个元素的迭代器。
equal_range
语法:
pair equal_range( const key_type &key );
返回集合中与给定值相等的上下限的两个迭代器。
erase
语法:
void erase( iterator i );
void erase( iterator start, iterator end );
size_type erase( const key_type &key );
说明:
1. 删除i元素;
2. 删除从start开始到end结束的元素;
3. 删除等于key值的所有元素(返回被删除的元素的个数)。
find
语法:
iterator find( const key_type &key );
在当前集合中查找等于key值的元素,并返回指向该元素的迭代器。如果没有找到,则返回end()。
get_allocator
语法:
allocator_type get_allocator();
返回当前集合的分配器。
insert
语法:
iterator insert( iterator i, const TYPE &val );
void insert( input_iterator start, input_iterator end );
pair insert( const TYPE &val );
说明:
1. 在迭代器i前插入val;
2. 将迭代器start开始到end结束返回内的元素插入到集合中;
3. 在当前集合中插入val元素,并返回指向该元素的迭代器和一个布尔值来说明val是否成功的被插入了。(应该注意的是在集合(Sets)中不能插入两个相同的元素。)
示例:
#include <iostream>
#include <set>
#include<string>
using namespace std;
typedef struct tagStudentInfo
{
int nID;
string strName;
bool operator <(tagStudentInfo const& _A) const//升序排列
{
//这个函数指定排序策略,按nID排序,如果nID相等的话,按strName排序
if(nID<_A.nID) return true;
if(nID == _A.nID) return strName.compare(_A.strName) < 0;
return false;
}
}StudentInfo,*PStudentInfo; //学生信息
void main()
{
set<StudentInfo>setStudent;
StudentInfo stuInfo;
stuInfo.nID = 1;
stuInfo.strName="student_one";
pair<set<StudentInfo>::iterator,bool>set_ptr;
set_ptr=setStudent.insert(stuInfo);
stuInfo.nID=1;
stuInfo.strName="student_one";
set_ptr=setStudent.insert(stuInfo);
if(!set_ptr.second){ cout<<"don`t insert!"<<endl; }
stuInfo.nID=2;
stuInfo.strName="student_two";
set_ptr=setStudent.insert(stuInfo);
if(!set_ptr.second){ cout<<"don`t insert 2!"<<endl; }
set<StudentInfo>::iterator p=setStudent.begin();
for(p;p!=setStudent.end();p++)
{
cout<<(*p).nID<<" "<<(*p).strName<<endl;
}
}
输出结果:
don`t insert!
1 student_one
2 student_two
lower_bound
语法:
iterator lower_bound( const key_type &key );
返回一个指向小于或者等于key值的第一个元素的迭代器
key_comp
语法:
key_compare key_comp();
返回一个用于元素间值比较的函数对象。
max_size
语法:
size_type max_size();
返回当前集合能容纳元素的最大限值。
rbegin
语法:
reverse_iterator rbegin();
返回指向当前集合中最后一个元素的反向迭代器。
rend
语法:
reverse_iterator rend();
返回指向集合中第一个元素的反向迭代器。
size
语法:
size_type size();
返回当前集合中元素的数目。
swap
语法:
void swap( set &object );
交换当前集合和object集合中的元素。
upper_bound
语法:
iterator upper_bound( const key_type &key );
在当前集合中返回一个指向大于Key值的元素的迭代器。
value_comp
语法:
value_compare value_comp();
返回一个用于比较元素间的值的函数对象。
set的集合功能(须#include<algorithm>):
1.两个有序集的并.
set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
三个set对象,分别为s1,s2,s.set_union的功能是将s1的某个序列(比如[s1.begin(),s1.end()))与s2的某个序列(比如[s2.begin(),s2.end()))合并,然后把合并序列插入到s中。
2.两个有序集的交.
set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
3.两个有序集的差.
set_difference (s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
发表评论
-
Linux内存点滴 用户进程内存空间 stack heap text data
2013-01-19 16:54 2900Linux内存点滴 用户进程内存空间 经常使用top ... -
Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数)
2011-10-28 15:09 4146Java JNI由浅入深(包括:Java和C++互传Array ... -
JNI编程(二) —— 让C++和Java相互调用(1)
2011-10-28 11:55 897自己在外面偷偷的算了下,又有将近两个月没更新过blog了。趁着 ... -
Android jni 常用方法备忘
2011-10-28 10:44 1163Android jni 常用方法备忘 ... -
c 线程同步
2011-10-28 09:23 852#include <pthread.h> #inc ... -
c++ 双线程协议解析 链表 sleep pthread_join g++编译
2011-10-25 11:37 1646主类 testlinklist.cpp #include &l ... -
undefined reference to 'pthread_create'问题解决
2011-10-25 10:19 1250undefined reference to 'pthread ... -
strlen与sizeof的区别
2011-10-12 14:20 807strlen与sizeof的区别 最后一个int a[3 ... -
C/C++语言数组作为参数传递
2011-09-28 17:08 1274#include <stdio.h> #inclu ... -
c/c++字符函数操作
2011-09-20 17:01 807// 取得Xml元素的值 // itemName:元 ... -
C++——指针,堆栈,引用,函数
2011-09-16 14:07 1321C++——指针,堆栈,引用,函数 ... -
今天看了两个小时<<21天学通C++>>把C++中的指针、引用、传值问题弄清楚了
2011-09-16 11:13 1025今天看了两个小时 <<21 天学通 C+ ... -
c++链表操作
2011-09-15 19:22 886最后我学习一下如何在已有的链表上插入节点 我们要考虑四 ... -
c++面向对象的编程入门篇--类构造函数与析构函数
2011-09-15 16:14 942请注意,这一节内容是c++的重点,要特别注意! 我们先说一 ... -
C++实例集合类
2011-09-13 11:04 1234// 此程序通过数组来定义集合类,虽不如链表高级, ... -
C++操作符含义
2011-01-20 10:44 2071C++操作符含义 "->"是 ...
相关推荐
为了实现不同类型数据的集合运算,需要使用 string类型,string类是STL中封装好的类。在自定义了单链表结构的基础上,使用string而不是自定义字符串结构可以有效避免数据结构的复杂性。但需要对STL中容器操作的使用...
这篇文章旨在告诉大家如何为一个类定义一个排序方法,以便在STL容器或者方法中使用。 作为一个C++程序员,你应该知道这些方法。 如何定义排序? 简而言之,为一个类定义排序,我们就可以知道类的任意两个对象在排序...
//STL 集合容器 #include <sstream> //基于字符串的流 #include <stack> //STL 堆栈容器 #include <stdexcept> //标准异常类 #include <streambuf> //底层输入/输出支持 #include ...
06_课堂答疑类中写成员函数_调用的时才会执行 07_程序设计方法发展历程 08_C语言和C++语言的关系_工作经验分享 09_namespace和iotream 10_实用性加强_register增强_检测增强 11_struct关键字类型增强 12_c++类型类型...
9.9 在派生类中使用构造函数和析构函数 9.10 将派生类对象隐式转换为基类对象 9.11 关于继承的软件工程 9.12 复合与继承的比较 9.13 对象的“使用”关系和“知道”关系 9.14 实例研究:类Point、CircIe和...
#include <set> //STL 集合容器 #include <sstream> //基于字符串的流 #include <stack> //STL 堆栈容器 #include <stdexcept> //标准异常类 #include <streambuf> //底层输入/输出支持 #include <string> ...
7.2.4 嵌套类和局部类定义 201 7.3 向量—标准模板库预览 202 7.3.1 向量基础 202 7.3.2 效率问题 205 第8章 操作符重载、友元和引用 210 8.1 基本操作符重载 210 8.1.1 重载基础 210 8.1.2 返回常量类型 ...
9.9 在派生类中使用构造函数和析构函数 9.10 将派生类对象隐式转换为基类对象 9.11 关于继承的软件工程 9.12 复合与继承的比较 9.13 对象的“使用”关系和“知道”关系 9.14 实例研究:类Point、CircIe和...
Visual Assist X只收集您工程中的头文件和对象信息,这些头文件和对象可以包含在系统、第三方库、MFC或ATL/WTL/STL中。这意味着Intellisence的活动更加频繁,结果也更加准确。 不止是C/C++,对于所有编程语言,...
3 、可编程控制器的分类 按I/O点数可分为大、中、小型三大类: 小型:I/O点数在256点以下; 中型:I/O点数在256~1024点之间; 大型:I/O点数在1024点以上。 第4页/共68页 PLC培训资料全文共68页,当前为第4页。 二...
Visual Assist X只收集您工程中的头文件和对象信息,这些头文件和对象可以包含在系统、第三方库、MFC或ATL/WTL/STL中。这意味着Intellisence的活动更加频繁,结果也更加准确。 不止是C/C++,对于所有编程语言,...
Visual Assist X只收集您工程中的头文件和对象信息,这些头文件和对象可以包含在系统、第三方库、MFC或ATL/WTL/STL中。这意味着Intellisence的活动更加频繁,结果也更加准确。 不止是C/C++,对于所有编程语言,...
迭代器在STL运用广泛,类似容器的迭代已经成为其重要特性,而迭代器模式则是利用迭代器概念进行的抽象运用,迭代器模式运用广泛和有用,因为其能够不考虑数据的存储方式,而是直接面对数据进行迭代,也就是说我们...