huyutian
他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks
<
2014年1月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(15)
给我留言
查看公开留言
查看私人留言
随笔档案
2015年12月 (1)
2015年3月 (3)
2015年2月 (1)
2014年12月 (1)
2014年2月 (1)
2013年10月 (1)
2012年10月 (1)
2012年4月 (1)
2011年7月 (2)
2011年6月 (2)
2010年11月 (1)
2010年8月 (1)
2010年7月 (3)
2010年2月 (1)
文章分类
编程技巧(24)
(rss)
汇编逆向(3)
(rss)
金融股票(2)
(rss)
嵌入系统(10)
(rss)
网络编程(8)
(rss)
系统其他(4)
(rss)
文章档案
2016年4月 (1)
2016年2月 (1)
2016年1月 (1)
2015年11月 (1)
2015年8月 (1)
2015年6月 (1)
2015年4月 (1)
2015年3月 (1)
2015年2月 (1)
2014年10月 (1)
2014年7月 (1)
2014年2月 (7)
2013年9月 (1)
2013年4月 (1)
2012年11月 (2)
2012年10月 (1)
2012年8月 (3)
2012年1月 (1)
2011年9月 (1)
2011年8月 (2)
2011年6月 (1)
2011年4月 (1)
2010年9月 (1)
2010年8月 (3)
2010年2月 (6)
2010年1月 (2)
2009年11月 (3)
相册
EC2108
搜索
最新评论
1. re: Windows系统三种定时器的分析
评论内容较长,点击标题查看
--Apophis
2. re: Windows系统三种定时器的分析
不是三种,还有另两种高精度定时器,其中一种是 timerSetEvent,不过一个进程中它只支持创建16个,还有一个是 mci 的定时器
--Apophis
3. re: 编译Zlib 1.2.5遇到的问题
在lgnore libraries输入MSVCRT(这个默认库和zlib库会有冲突)
--Nightingale
4. re: 注意TA-LIB与国内股票软件的技术指标计算方式的区别[未登录]
评论内容较长,点击标题查看
--李浩
5. re: 华为EC2108机顶盒刷安卓系统
@哎吆喝吆喝
你的杜邦线没有接好
--etg00556
阅读排行榜
1. 解决visual studio 2010下warning LNK4099: PDB 'vc100.pdb' was not found问题(22010)
2. pandas使用HDF5格式存储需要注意的问题(11888)
3. 注意TA-LIB与国内股票软件的技术指标计算方式的区别(8770)
4. 编译Zlib 1.2.5遇到的问题(6681)
5. 推荐一款轻巧好用的编辑软件MadEdit(6194)
评论排行榜
1. 编译Zlib 1.2.5遇到的问题(4)
2. 解决visual studio 2010下warning LNK4099: PDB 'vc100.pdb' was not found问题(2)
3. vc不同版本项目转换工具(1)
4. 注意TA-LIB与国内股票软件的技术指标计算方式的区别(1)
5. 学习关于STL标准容器(0)
转贴:STL之set使用方法小结
/**/
/*
set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。
1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素
2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数
3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)
set模板原型://Key为元素(键值)类型
template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) >
从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式,
另外,利用原型,可以有效地辅助分析创建对象的几种方式
*/
#include
<
iostream
>
#include
<
string
>
#include
<
set
>
using
namespace
std;
struct
strLess
{
bool
operator
() (
const
char
*
s1,
const
char
*
s2)
const
{
return
strcmp(s1, s2)
<
0
;
}
}
;
void
printSet(
set
<
int
>
s)
{
copy(s.begin(), s.end(), ostream_iterator
<
int
>
(cout,
"
,
"
) );
//
set<int>::iterator iter;
//
for (iter = s.begin(); iter != s.end(); iter++)
//
//
cout<<"set["<<iter-s.begin()<<"]="<<*iter<<", ";
//
Error
//
cout<<*iter<<", ";
cout
<<
endl;
}
void
main()
{
//
创建set对象,共5种方式,提示如果比较函数对象及内存分配器未出现,即表示采用的是系统默认方式
//
创建空的set对象,元素类型为int,
set
<
int
>
s1;
//
创建空的set对象,元素类型char*,比较函数对象(即排序准则)为自定义strLess
set
<
const
char
*
, strLess
>
s2( strLess);
//
利用set对象s1,拷贝生成set对象s2
set
<
int
>
s3(s1);
//
用迭代区间[&first, &last)所指的元素,创建一个set对象
int
iArray[]
=
{
13
,
32
,
19
}
;
set
<
int
>
s4(iArray, iArray
+
3
);
//
用迭代区间[&first, &last)所指的元素,及比较函数对象strLess,创建一个set对象
const
char
*
szArray[]
=
{
"
hello
"
,
"
dog
"
,
"
bird
"
}
;
set
<
const
char
*
, strLess
>
s5(szArray, szArray
+
3
, strLess() );
//
元素插入:
//
1,插入value,返回pair配对对象,可以根据.second判断是否插入成功。(提示:value不能与set容器内元素重复)
//
pair<iterator, bool> insert(value)
//
2,在pos位置之前插入value,返回新元素位置,但不一定能插入成功
//
iterator insert(&pos, value)
//
3,将迭代区间[&first, &last)内所有的元素,插入到set容器
//
void insert[&first, &last)
cout
<<
"
s1.insert(
) :
"
<<
endl;
for
(
int
i
=
0
; i
<
5
; i
++
)
s1.insert(i
*
10
);
printSet(s1);
cout
<<
"
s1.insert(20).second =
"
<<
endl;;
if
(s1.insert(
20
).second)
cout
<<
"
Insert OK!
"
<<
endl;
else
cout
<<
"
Insert Failed!
"
<<
endl;
cout
<<
"
s1.insert(50).second =
"
<<
endl;
if
(s1.insert(
50
).second)
{cout
<<
"
Insert OK!
"
<<
endl; printSet(s1);}
else
cout
<<
"
Insert Failed!
"
<<
endl;
cout
<<
"
pair<set<int>::iterator::iterator, bool> p;\np = s1.insert(60);\nif (p.second):
"
<<
endl;
pair
<
set
<
int
>
::iterator::iterator,
bool
>
p;
p
=
s1.insert(
60
);
if
(p.second)
{cout
<<
"
Insert OK!
"
<<
endl; printSet(s1);}
else
cout
<<
"
Insert Failed!
"
<<
endl;
//
元素删除
//
1,size_type erase(value) 移除set容器内元素值为value的所有元素,返回移除的元素个数
//
2,void erase(&pos) 移除pos位置上的元素,无返回值
//
3,void erase(&first, &last) 移除迭代区间[&first, &last)内的元素,无返回值
//
4,void clear(), 移除set容器内所有元素
cout
<<
"
\ns1.erase(70) =
"
<<
endl;
s1.erase(
70
);
printSet(s1);
cout
<<
"
s1.erase(60) =
"
<<
endl;
s1.erase(
60
);
printSet(s1);
cout
<<
"
set<int>::iterator iter = s1.begin();\ns1.erase(iter) =
"
<<
endl;
set
<
int
>
::iterator iter
=
s1.begin();
s1.erase(iter);
printSet(s1);
//
元素查找
//
count(value)返回set对象内元素值为value的元素个数
//
iterator find(value)返回value所在位置,找不到value将返回end()
//
lower_bound(value),upper_bound(value), equal_range(value) 略
cout
<<
"
\ns1.count(10) =
"
<<
s1.count(
10
)
<<
"
, s1.count(80) =
"
<<
s1.count(
80
)
<<
endl;
cout
<<
"
s1.find(10) :
"
;
if
(s1.find(
10
)
!=
s1.end())
cout
<<
"
OK!
"
<<
endl;
else
cout
<<
"
not found!
"
<<
endl;
cout
<<
"
s1.find(80) :
"
;
if
(s1.find(
80
)
!=
s1.end())
cout
<<
"
OK!
"
<<
endl;
else
cout
<<
"
not found!
"
<<
endl;
//
其它常用函数
cout
<<
"
\ns1.empty()=
"
<<
s1.empty()
<<
"
, s1.size()=
"
<<
s1.size()
<<
endl;
set
<
int
>
s9;
s9.insert(
100
);
cout
<<
"
s1.swap(s9) :
"
<<
endl;
s1.swap(s9);
cout
<<
"
s1:
"
<<
endl;
printSet(s1);
cout
<<
"
s9:
"
<<
endl;
printSet(s9);
//
lower_bound,upper_bound,equal_range(略)
}
/**/
///////////////
i测试结果
////////////////////////
/
s1.insert(
) :
0
,
10
,
20
,
30
,
40
,
s1.insert(
20
).second
=
Insert Failed
!
s1.insert(
50
).second
=
Insert OK
!
0
,
10
,
20
,
30
,
40
,
50
,
pair
<
set
<
int
>
::iterator::iterator,
bool
>
p;
p
=
s1.insert(
60
);
if
(p.second):
Insert OK
!
0
,
10
,
20
,
30
,
40
,
50
,
60
,
s1.erase(
70
)
=
0
,
10
,
20
,
30
,
40
,
50
,
60
,
s1.erase(
60
)
=
0
,
10
,
20
,
30
,
40
,
50
,
set
<
int
>
::iterator iter
=
s1.begin();
s1.erase(iter)
=
10
,
20
,
30
,
40
,
50
,
s1.count(
10
)
=
1
, s1.count(
80
)
=
0
s1.find(
10
) : OK
!
s1.find(
80
) : not found
!
s1.empty()
=
0
, s1.size()
=
5
s1.swap(s9) :
s1:
100
,
s9:
10
,
20
,
30
,
40
,
50
,
posted on 2010-02-07 23:55
胡雨田
阅读(51955)
评论(0)
编辑
收藏
引用
所属分类:
编程技巧
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
关于pandas的DataFrame的一个性能问题
关于python字典key值查找效率的测试
从dll文件自动生成lib文件
python自学笔记(六)
python自学笔记(五)
python技巧摘录(一)
python自学笔记(四)
python自学笔记(三)
python自学笔记(二)
python自学笔记(一)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 胡雨田