我爱Aspx >> VC.Net >> Effective STL:Item 16:如何将vector和string的数据传给传统的API函数Effective STL:Item 16:如何将vector和string的数据传给传统的API函数
ss=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left>
因为 C++语言已经于1998年被标准化,C++的中坚分子在试图推动程序员从数组转到vector时就没什么顾虑了。同样的情况也发生于从char *指针转到string对象的过程中。有很好的理由来做这些转变,比如可以消除常见的编程错误(Item 13),和有机会获得STL泛型算法的全部强大能力 (参见,比如,Item 31)。
但是,麻烦还是有的,而最常见的一个就是已经存在的传统C风格API函数接受的是数组和char *指针,而不是vector和string对象。这样的API函数还将会存在很长时间,如果我们要高效使用STL的话,就必须和它们和平共处。
幸运的是,这很容易。如果你有一个vector对象v,而你需要得到一个指向v中数据的指针,以使得它可以被当作一个数组,只要使用&v[0]就可以了。对于string对象s,相应的语法是很简单的s.c_str()。但只能从上面读。如广告时常指明的,有几个限制。。
给定一个
vector<int> v;
表达式v[0]生产一个指向vector中首元素的引用,所以,&v[0]是指向那个首元素的指针。vector中的元素被C++标准限定为存储在连续内存中,就象是一个数组,所以,如果我们传递v给如此形式的C风格API函数
异步 SOCKET 编程 - 发送和接收数..[05-21]
MFC中的数据类型[05-21]
数据类型的转换[05-21]
TN002: Persistent Object Data ..[05-21]
如何在Linux下刻录数据光盘[05-21]
直接通过ADO操作Access数据库[05-21]
游戏外挂第一步(拦截数据封包)和..[05-21]
游戏外挂第一步(拦截数据封包)和..[05-21]
Crazybit开发手记(一):设计之..[05-21]
VC开发数据库基础之ADO篇 (2)[05-21]
用户文档[05-21]
C++基本功:从一个左右值问题出发..[05-21]
Policy Tool — 策略文件创建和管..[05-21]
Effective STL: Item 21:永远让..[05-21]
获取系统当前打开的端口(tcp。u..[05-21]
实战DeviceIoControl 之六:访问..[05-21]
By value? Or by reference?[05-21]
一个计算万年历的简单程序[05-21]
一个计算万年历的简单程序[05-21]
获取远程网卡MAC地址。[05-21]