vector如何得到所存数据的首地址

xt_jat 2006-12-26 04:26:49
在VC6中,我常这样用

std::vector<char> datas ;

如果有一个函数 count(char* pData, int size) ;
我就写成count( datas.begin(), datas.size()) ;

可这种方法,在别的C++编译器,比如GCC通不过。大家在有这样的需求时,会怎么做?
...全文
1345 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BasicFong 2006-12-26
  • 打赏
  • 举报
回复
6楼的,学习中
ATField 2006-12-26
  • 打赏
  • 举报
回复
不能用datas.begin(),这个返回的是迭代器,对于vector来说通常是指针,指向实际位置,但是不能依赖于这种行为。用&data[0]就可以了(不为空),vector中的数据是连续的。但是由于vector中不一定会有字符串的结束符'\0',所以这种情况还是用string,或者不用字符串函数。
  • 打赏
  • 举报
回复
不为空的时候
&data[0];
cunsh 2006-12-26
  • 打赏
  • 举报
回复
<<Effective STL>>
条款16: 如何将vector和string的数据传给遗留的API

要得到vector中第一个元素的指针.用&v[0] .
但要注意当v为空时. &v[0]的结果是未定义的. 应该用 v.empty() 判断一下.
不要用迭代器v.begin()代替&v[0] . 可以用 &*v.begin() .


要将string转换成c字符串用c_str() .
但不能用&s[0]. 它和vector不一样. 它没有保证元素连续存储在一起.
string也不保证以'\0'结尾.
KUCHIBUE 2006-12-26
  • 打赏
  • 举报
回复
LS同志,LZ的vector是用char来实例化的。。。
ouyh12345 2006-12-26
  • 打赏
  • 举报
回复
这样好象不行吧。
vector存的是值,而地址不一定是连续的,所以不能用char *的方式来使用vector。
再说了,datas.begin()的类型是std::vector<char>::iterator
KUCHIBUE 2006-12-26
  • 打赏
  • 举报
回复
&(*datas.begin()) 行不行?
ShardowM 2006-12-26
  • 打赏
  • 举报
回复
应该不会通不过的,可能你的环境变量设置的有问题.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧