huyutian
他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
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
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(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之vector用法小结
/**/
/*
Vector: 它就是数组的一个泛化推广, 等同于数组,它拥有一段连续的内存空间,并且起始地址不变,
优点:1)很好的支持随机存取,即[]操作符,查询操作高效
缺点:1)插入/删除会造成内存块的拷贝,效率较低,(尾部元素除外)
2)内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝,大大影响了vector的效率
*/
#include
<
iostream
>
#include
<
vector
>
#include
<
algorithm
>
using
namespace
std;
void
printVector(vector
<
int
>
v1)
{
//
使用下标方式
//
for (unsigned int i = 0; i < v1.size(); i++)
//
{
//
cout<<"v1["<<i<<"] = "<<v1[i]<<endl;
//
}
//
使用迭代器
//
vector<int>::iterator iter;
//
for (iter = v1.begin(); iter != v1.end(); iter++)
//
{
//
//
cout<<"v1["<<iter-v1.begin()<<"] = "<<*iter<<endl;
//
cout<<"v1["<<iter-v1.begin()<<"]"<<"="<<*iter<<", ";
//
}
//
cout<<endl;
//
使用迭代器指针
//
vector<int>::iterator *pIter;
//
Error,迭代器指针需要分配内存才能使用,
//
或者通俗的说pIter未实现时,*pIter是不确定的,运行时对其赋值必须会发生异常
vector
<
int
>
::iterator
*
pIter
=
new
vector
<
int
>
::iterator;
if
(NULL
==
pIter)
{
return
;
}
for
(
*
pIter
=
v1.begin();
*
pIter
!=
v1.end(); (
*
pIter)
++
)
//
此处若写成*pIter++是不对的,因为++优化级别较高
{
cout
<<**
pIter
<<
"
,
"
;
}
if
(NULL
!=
pIter)
{
delete pIter;
pIter
=
NULL;
}
cout
<<
endl;
}
void
reversePrintVector(vector
<
int
>
vec)
{
vector
<
int
>
::reverse_iterator revIter;
for
(revIter
=
vec.rbegin(); revIter
!=
vec.rend(); revIter
++
)
{
cout
<<
"
v[
"
<<
revIter
-
vec.rbegin()
<<
"
]=
"
<<*
revIter
<<
"
,
"
;
}
cout
<<
endl;
}
int
main()
{
//
创建
vector
<
int
>
v1;
//
创建空的vector对象
vector
<
int
>
v2(
10
);
//
创建具有10个元素的vector对象
vector
<
double
>
v3(
10
,
9.1
);
//
创建具有10个元素的vector对象,每个元素的值为9.1
vector
<
double
>
v4(v3);
//
通过拷贝一个V3对象的各个元素值,创建一个新的vector对象
int
iArray[]
=
{
11
,
13
,
19
,
23
,
27
}
;
vector
<
int
>
v(iArray, iArray
+
5
);
//
通过拷贝迭代器区间[first, end)的元素值,创建新的vector对象
//
初始化----用push_back,在容器的尾端插入新元素
v1.push_back(
3
);
v1.push_back(
10
);
v1.push_back(
19
);
//
遍历访问:1-下标方式(略)
//
遍历访问之2:迭代器方式, 建议使用此方式并熟练应用之
cout
<<
"
printVector(v1):
"
<<
endl;
printVector(v1);
//
反向遍历之迭代器方式
cout
<<
"
reversePrintVector(v1):
"
<<
endl;
reversePrintVector(v1);
//
插入元素:用insert(&pos, elem)
cout
<<
"
v1.insert(v1.begin() + 1, 100):
"
<<
endl;
v1.insert(v1.begin()
+
1
,
100
);
printVector(v1);
//
删除元素: 尾部元素删除用pop_back();单个元素删除用erase(&pos);
//
[first, last)区间元素删除用erase(&first, &last); 整体删除用clear();
cout
<<
"
v1.erase(v1.begin() + 1):
"
<<
endl;
v1.erase(v1.begin()
+
1
);
printVector(v1);
cout
<<
"
v1.pop_back():
"
<<
endl;
v1.pop_back();
printVector(v1);
//
查找函数:由外部算法提供
vector
<
int
>
::iterator iter;
cout
<<
"
find(v1.begin(), v1.end(), 2) =
"
<<
endl;
iter
=
find(v1.begin(), v1.end(),
10
);
if
(iter
!=
v1.end())
cout
<<
"
find
"
<<*
iter
<<
"
at index:
"
<<
iter
-
v1.begin()
<<
endl;
else
cout
<<
"
not find
"
<<
endl;
cout
<<
"
v1.empty() =
"
<<
v1.empty()
<<
endl;
cout
<<
"
其它:\nv1.empty() =
"
<<
v1.empty()
<<
"
, v1.size() =
"
<<
v1.size()
<<
"
, v1.max_size() =(hex)
"
<<
hex
<<
v1.max_size()
<<
endl;
cout
<<
"
head-elem=
"
<<
dec
<<
v1.front()
<<
endl;
cout
<<
"
tail-elem=
"
<<
v1.back()
<<
endl;
//
清空
cout
<<
"
v1.clear()
"
<<
endl;
v1.clear();
cout
<<
"
v1.size() =
"
<<
v1.size()
<<
"
, v1.empty()=
"
<<
v1.empty()
<<
endl;
}
/**/
////////////////////////////////////
运行结果
//////////////////////////////////////////////////////
//
printVector(v1):
3
,
10
,
19
,
reversePrintVector(v1):
v[
0
]
=
19
, v[
1
]
=
10
, v[
2
]
=
3
,
v1.insert(v1.begin()
+
1
,
100
):
3
,
100
,
10
,
19
,
v1.erase(v1.begin()
+
1
):
3
,
10
,
19
,
v1.pop_back():
3
,
10
,
find(v1.begin(), v1.end(),
2
)
=
find
10
at index:
1
v1.empty()
=
0
其它:
v1.empty()
=
0
, v1.size()
=
2
, v1.max_size()
=
(hex)3fffffff
head
-
elem
=
3
tail
-
elem
=
10
v1.clear()
v1.size()
=
0
, v1.empty()
=
1
posted on 2010-02-08 00:00
胡雨田
阅读(1991)
评论(0)
编辑
收藏
引用
所属分类:
编程技巧
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
关于pandas的DataFrame的一个性能问题
关于python字典key值查找效率的测试
从dll文件自动生成lib文件
python自学笔记(六)
python自学笔记(五)
python技巧摘录(一)
python自学笔记(四)
python自学笔记(三)
python自学笔记(二)
python自学笔记(一)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 胡雨田