huyutian
他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks
<
2010年11月
>
日
一
二
三
四
五
六
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
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(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之list之用法小结
/**/
/*
list: 等同于双向链表,内存空间可以是不连续的,通过指针来进行数据的访问
优: 1)插入/删除效率高
缺: 1)不支持随机存取,查询效率较低
*/
#include
<
iostream
>
#include
<
string
>
#include
<
list
>
using
namespace
std;
void
printList(list
<
int
>
nList)
{
//
使用迭代器
//
list<int>::iterator iter;
//
for ( iter = nList.begin(); iter != nList.end(); iter++)
//
{
//
cout<<*iter<<", ";
//
}
//
使用迭代器指针
list
<
int
>
::iterator
*
pIter
=
new
list
<
int
>
::iterator;
//
list<int>::iterator *pIter;error,原因见vector相应函数
if
( NULL
==
pIter )
{
return
;
}
for
(
*
pIter
=
nList.begin();
*
pIter
!=
nList.end(); (
*
pIter)
++
)
//
此处不可写成*pIter++
{
cout
<<**
pIter
<<
"
,
"
;
}
cout
<<
endl;
}
int
main()
{
//
创建list
list
<
int
>
l1;
//
创建一个没有任何元素的list
list
<
int
>
l2(
10
);
//
创建一个有n个元素的list,每个元素值为默认
list
<
double
>
l3(
10
,
9.3
);
//
创建具有10个元素的list,每个元素的初始值为9.3
list
<
double
>
l4(l3);
//
通过拷贝一个list对象的元素,创建一个新的list对象
int
iArray[]
=
{
3
,
10
,
19
}
;
list
<
int
>
l5(iArray, iArray
+
3
);
//
将另一个list对象的迭代器区间[first, last)所指的元素,拷贝到新创建的list对象中
//
初如化赋值 :用push_back将元素依次链入LIST中
for
(
int
i
=
1
; i
<
6
; i
++
)
l1.push_back(i);
list
<
int
>
::iterator iter;
cout
<<
"
printList(l1):
"
<<
endl;
printList(l1);
//
元素插入 :尾部添加用push_back(); 首部插入用push_front();任意位置插入用insert(&pos, elem)
//
下面语句error:list与vector不同,因为存储方式上的差异, list不能+n,只能++,
//
这种情况下最好还是通过迭代器++为好
//
l1.insert((l1.begin())+1, 100);
l1.insert(
++
l1.begin(),
100
);
//
或者用iter=l1.begin(); iter++;l1.insert(iter, 100);
cout
<<
"
++l1.insert(l1.begin(),100) (if use l1.begin()+1 is error) =
"
<<
endl;
printList(l1);
cout
<<
"
l1.push_back(200) =
"
<<
endl;
l1.push_back(
200
);
printList(l1);
cout
<<
"
l1.push_front(-200) =
"
<<
endl;
l1.push_front(
-
200
);
printList(l1);
//
元素删除: 尾部删除用pop_back(); 首部删除用pop_front();
//
指定元素的删除,位置用erase(&pos); 区间用erase(&first_pos, &last_pos)
//
删除所有元素用 clear();
//
删除list中所有元素值为value的元素用remove(value)
cout
<<
"
l1.pop_back() =
"
<<
endl;
l1.pop_back();
printList(l1);
cout
<<
"
l1.pop_front() =
"
<<
endl;
l1.pop_front();
printList(l1);
cout
<<
"
l1.erase(++l1.begin()) =
"
<<
endl;
l1.erase(
++
l1.begin());
printList(l1);
iter
=
l1.begin();
iter
++
;
iter
++
;
cout
<<
"
iter=l1.begin; iter++;iter++; l1.erase(l1.begin(), iter) =
"
<<
endl;
l1.erase(l1.begin(), iter);
printList(l1);
cout
<<
"
l1.remove(100) =
"
<<
endl;
l1.remove(
100
);
printList(l1);
cout
<<
"
l1.remove(4) =
"
<<
endl;
l1.remove(
4
);
printList(l1);
//
其它
cout
<<
"
其它:
"
<<
endl;
list
<
int
>
listTest;
for
(
int
i
=
1
; i
<
6
; i
++
)
listTest.push_back(i
*
100
);
cout
<<
"
printList(listTest) =
"
<<
endl;
printList(listTest);
//
swap函数
cout
<<
"
after l1.swap(listTest), l1 =
"
<<
endl;
l1.swap(listTest);
printList(l1);
//
splice函数
//
void splice(&pos, list &x):将list x归并到当前list的&pos之前,同时list x将被清空
//
void splice(&pos, list &x, &x.pos),将list x中迭代器x.pos处的元素归并到当前list,同时被归并的元素将被清空
cout
<<
"
after l1.splice(l1.begin(), listTest):
"
<<
endl;
l1.swap(listTest);
//
恢复
l1.splice(l1.begin(), listTest);
cout
<<
"
l1 =
"
<<
endl;
printList(l1);
cout
<<
"
listTest =
"
<<
endl;
printList(listTest);
l1.clear();
for
(
int
i
=
1
; i
<
6
; i
++
)
l1.push_back(i);
for
(
int
i
=
1
; i
<
6
; i
++
)
listTest.push_back(i
*
100
);
//
恢复
cout
<<
"
after l1.splice(++l1.begin(), listTest, --listTest.end()) :
"
<<
endl;
l1.splice(
++
l1.begin(), listTest,
--
listTest.end());
cout
<<
"
l1 =
"
<<
endl;
printList(l1);
cout
<<
"
listTest =
"
<<
endl;
printList(listTest);
//
merge函数(略)归并的两链表都是是有序性,此函数才有意义
//
sort
cout
<<
"
now l1 is set as :
"
<<
endl;
l1.clear();
for
(
int
i
=
9
; i
>=
0
; i
--
)
l1.push_back(i);
printList(l1);
cout
<<
"
l1.sort() =
"
<<
endl;
l1.sort();
printList(l1);
cout
<<
"
l1.empty() =
"
<<
l1.empty()
<<
"
, l1.size() =
"
<<
l1.size()
<<
endl;
cout
<<
"
after l1.clear():
"
<<
endl;
l1.clear();
cout
<<
"
l1.empty() =
"
<<
l1.empty()
<<
"
, l1.size() =
"
<<
l1.size()
<<
endl;
}
//
测试结果
printList(l1):
1
,
2
,
3
,
4
,
5
,
++
l1.insert(l1.begin(),
100
) (
if
use l1.begin()
+
1
is
error
1
,
100
,
2
,
3
,
4
,
5
,
l1.push_back(
200
)
=
1
,
100
,
2
,
3
,
4
,
5
,
200
,
l1.push_front(
-
200
)
=
-
200
,
1
,
100
,
2
,
3
,
4
,
5
,
200
,
l1.pop_back()
=
-
200
,
1
,
100
,
2
,
3
,
4
,
5
,
l1.pop_front()
=
1
,
100
,
2
,
3
,
4
,
5
,
l1.erase(
++
l1.begin())
=
1
,
2
,
3
,
4
,
5
,
iter
=
l1.begin; iter
++
;iter
++
; l1.erase(l1.begin(), iter)
3
,
4
,
5
,
l1.remove(
100
)
=
3
,
4
,
5
,
l1.remove(
4
)
=
3
,
5
,
其它:
printList(listTest)
=
100
,
200
,
300
,
400
,
500
,
after l1.swap(listTest), l1
=
100
,
200
,
300
,
400
,
500
,
after l1.splice(l1.begin(), listTest):
l1
=
100
,
200
,
300
,
400
,
500
,
3
,
5
,
listTest
=
after l1.splice(
++
l1.begin(), listTest,
--
listTest.end())
l1
=
1
,
500
,
2
,
3
,
4
,
5
,
listTest
=
100
,
200
,
300
,
400
,
now l1
is
set
as
:
9
,
8
,
7
,
6
,
5
,
4
,
3
,
2
,
1
,
0
,
l1.sort()
=
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
l1.empty()
=
0
, l1.size()
=
10
after l1.clear():
l1.empty()
=
1
, l1.size()
=
0
posted on 2010-02-07 23:59
胡雨田
阅读(4853)
评论(2)
编辑
收藏
引用
所属分类:
编程技巧
评论
#
re: 转贴:STL之list之用法小结[未登录]
2010-05-27 19:08
jack
转我的贴,没有注明地址,哎。。
回复
更多评论
#
re: 转贴:STL之list之用法小结
2012-02-03 09:50
coco
非常好的总结
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
关于pandas的DataFrame的一个性能问题
关于python字典key值查找效率的测试
从dll文件自动生成lib文件
python自学笔记(六)
python自学笔记(五)
python技巧摘录(一)
python自学笔记(四)
python自学笔记(三)
python自学笔记(二)
python自学笔记(一)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 胡雨田