如何实现int* p 与 vector p 的转换?

helen11 2006-06-17 05:18:38
新的程序中使用了vector <int*>,而一些经典算法的输入参数仍然使用传统的指针(或数组),
如何进行它们之间的转换?
谢谢!

有一个函数AddPoint1(int p0,int *&pV), 输入参数采用传统的指针(或数组),我在main()程序中定义了一个vector <int*> &p_I,但是编译出错:cannot convert parameter 2 from 'std::vector<_Ty>' to 'int *&。
如何实现调用?

int AddPoint1(int p0,int *&pV);
main()
{
vector <int*> p_V;
int i0;

AddPoint1(i0,p_V);
}

同样,如何实现int* p 到 vector <int*> 的转换?
int AddPoint(int p0,vector <int*> p_V);
main()
{
int* pV;
int i0;

AddPoint(i0,pV);
}
...全文
353 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hu_vane 2006-06-18
  • 打赏
  • 举报
回复
int *p[size] = {0};
-----------------------------
size是怎么回事?常量还是变量?
size为常量时,VC2005编译正常。如果是变量,LZ要补补数组声明的基础了。
helen11 2006-06-18
  • 打赏
  • 举报
回复
使用上述办法不行啊!

如果都需要copy,很麻烦,STL没有提供转换机制?

另外,int *p[size] = {0};
vc2005编译出错
sharpdew 2006-06-18
  • 打赏
  • 举报
回复
直接用int *p = (int*)&vp[0]有一个小问题,就是向量数组大小不好控制
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有vector.size(),怎么会不知道大小呢!?
zzzace 2006-06-18
  • 打赏
  • 举报
回复
为什么在工作中很少有用stl的?
和2楼一样的问题:STL是大势所趋?
helen11 2006-06-18
  • 打赏
  • 举报
回复
vector <int*> vp;
vector <int> vp;
vector <int*> &vp;
vector <int> &vp;
这些有什么不同,类似传统的:
int* vp
int vp
int *&vp;
int &vp
????

有没有大虾推荐一本好的stl书?
helen11 2006-06-18
  • 打赏
  • 举报
回复
&v[0], 或
int* p = (int*)&vp[0];
参数传递失败!
helen11 2006-06-18
  • 打赏
  • 举报
回复
int *p[size] = {0};
vc2005编译错误:error C2057: expected constant expression
winks 2006-06-17
  • 打赏
  • 举报
回复
友情提示:
直接用int *p = (int*)&vp[0]有一个小问题,就是向量数组大小不好控制,因为vector向量的尾部是一个随机数,没有任何结束标识,建议还是copy一下吧:
vector <int*> vp;
const int size = vp.size() 1;
int *p[size] = {0};
for (int i = 0; i < vp.size(); ++i)
{
p[i] = vp[i];
}
这样就多了结束标识了。
sharpdew 2006-06-17
  • 打赏
  • 举报
回复
如何实现int* p 与 vector <int*> p 的转换?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果是已经有了vector<int*> vp, 那么要得到其中的int*p, 可以这样:
int* p = (int*)&vp[0];
也就是取得vector类中中的存储数据的连续内存的起始地址
helen11 2006-06-17
  • 打赏
  • 举报
回复
1 AddPoint函数肯定是不能重写的,这里仅仅是一个例子,大量的经典算法是不可能重写的。太耗时!
2 请jixingzhong“你用 C++ 写一个访问元素的函数不就可以了”讲详细的呀!

先谢了!
jixingzhong 2006-06-17
  • 打赏
  • 举报
回复
楼主,你用 C++ 写一个访问元素的函数不就可以了 ...

就是用 C++ 再包装一下,
返回的就是 这个 vector 的元素值就可以了 ...
LiuYinChina 2006-06-17
  • 打赏
  • 举报
回复
liking100(阿他)说得对,有用写v.begin()(取代&v[0]),其实,我也这样做,不过刚才忘了!
不过,我认为还是重新写AddPoint,最好!
万一,你一不心,push_back,万一,这时由,push_back引起vector的内存转移,
而AddPoint中的指针还没有更新(进了AddPoint,其实就不能更新指针了),
这时,程序就很可能...
LiuYinChina 2006-06-17
  • 打赏
  • 举报
回复
不能直接转换,vector中有别的变量,如begin(),end()的返回值,在vector中,是有成员变量存储的!内存结构不是单纯的指针数组.
就算转换成功,用操作指针数组的方法操作vector,是绝对不安全的
只有重新写AddPoint是最好的办法,我认为的话!
liking100 2006-06-17
  • 打赏
  • 举报
回复
楼主的问题,确实值得探讨的~呵呵

一些经典算法的输入参数仍然使用传统的指针,而STL中多用容器和迭代器~

vector容器是可以和经典算法相容的,因为vector的内存布局和数组一样~

其他的序列容器和关联容器就不可以了~因为内存不局不一样~

list 是基于节点的,deque是块分布的,关联容器是用平衡二叉树来实现的~

比如:

算法原型如下: void calgorithm(int *p,int size);

int main()
{
vector<int> v;
int p[size];
//填充v和p
calgorithm(p,size);//指针调用
calgorithm(&v[0],v.size());//STL容器调用
}

也有用写v.begin()(取代&v[0]),可能视vector<int> 的迭代器为int*,就可以匹配参数了

但也有时候这种写法也不一定正确~,因为vector<int> 的迭代器不一定可等价为int*!~

通常写&v[0]就可以了,如果非要用到begin()的话, &(*v.begin())写比较合适~

写&v[0]的时候要保证v[0]可以返回一个有效的引用值~


说通常应该多用vector而不是内置数组,

是考虑到可移植性和可调试行也许用内置数组要优于STL容器


个人的一些看法~(其实也很多是看Effective STL 学来的)

呵呵,希望对LZ有些帮助

helen11 2006-06-17
  • 打赏
  • 举报
回复
另外,高手们是否认为,一定要放弃原来的指针、数组,使用STL动态分配空间?
STL是大势所趋?

thanks
昨日,11.19,最新整理了,第61-80题,现在公布上传。 另加上之前公布的第1-60 题,在此做一次汇总上传,以飨各位。 可以这么说,绝大部分的面试题,都是这100 道题系列的翻版, 此微软等公司数据结构+算法面试100 题系列,是极具代表性的经典面试题。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 题[第21-40 题答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 题[前20 题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 题[前25 题] http://download.csdn.net/source/2796735 题目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何题目或任何答案,有任何问题,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何题目或资源享有版权。转载以上公布的任何一题, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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