同型vector之间的赋值

从来不作 2014-10-23 05:20:09
现有vector<float> d1,vector< vector<float> > d2,想把d2[0]赋给d1,我有两种思路。
1. d1 = d2[0]
2. memcpy(&d1[0],&d2[0][0],size)
大家觉得哪种方法快呢
...全文
705 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-10-24
  • 打赏
  • 举报
回复
引用 6 楼 banshichiqinglangzi 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 方法2不可行,因为vector是对象不是一段内存。
如果vector中的元素是连续存储的,是不是方法二更快些?[/quote] 应该是。 因为memcpy经过精心优化: 先 http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’,再点立即安装 再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\intel\memcpy.asm
帅气小小少 2014-10-24
  • 打赏
  • 举报
回复
首先问个问题:vector难道不是连续存储的吗? 我觉得这两种方法效率差不多。 vector的=重载里面也是用的memcpy之类的函数连续拷贝的吧。
从来不作 2014-10-24
  • 打赏
  • 举报
回复
引用 10 楼 royzou 的回复:
要一个一个元素赋值吧,用循环,
你这是什么意思?
royzou 2014-10-24
  • 打赏
  • 举报
回复
要一个一个元素赋值吧,用循环,
从来不作 2014-10-24
  • 打赏
  • 举报
回复
引用 8 楼 xiaohuh421 的回复:
你觉得你的vector得有多大才能体现速度的快慢? 在普通电脑上, 普通数据量, 你根本看不出两者的速度差别.
我只是想从理论上探讨这个问题,我的vector很大,能达到百万千万这个级别
xiaohuh421 2014-10-24
  • 打赏
  • 举报
回复
你觉得你的vector得有多大才能体现速度的快慢? 在普通电脑上, 普通数据量, 你根本看不出两者的速度差别.
从来不作 2014-10-24
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
方法2不可行,因为vector是对象不是一段内存。
如果vector中的元素是连续存储的,是不是方法二更快些?
从来不作 2014-10-24
  • 打赏
  • 举报
回复
引用 3 楼 zhaowech 的回复:
[quote=引用 楼主 banshichiqinglangzi 的回复:] 现有vector<float> d1,vector< vector<float> > d2,想把d2[0]赋给d1,我有两种思路。 1. d1 = d2[0] 2. memcpy(&d1[0],&d2[0][0],size) 大家觉得哪种方法快呢
方法2不行,因为,stl的对象,内存是不连续的,这样会导致内存错误[/quote] 如果d2是连续的呢?比如d2是通过memcpy函数拷贝一段内存进行初始化的,那就可以了吧
孤影品茗 2014-10-24
  • 打赏
  • 举报
回复
引用 15 楼 banshichiqinglangzi 的回复:
[quote=引用 14 楼 mymtom 的回复:] 当然是方法1啊 方法2不行的
vector不是连续存储的吗?[/quote] of course!!!
mymtom 2014-10-24
  • 打赏
  • 举报
回复
引用 15 楼 banshichiqinglangzi 的回复:
[quote=引用 14 楼 mymtom 的回复:] 当然是方法1啊 方法2不行的
vector不是连续存储的吗?[/quote] 连续存储也不能memcpy呀! 先不要考虑速度的问题,memcpy是绝对不用来访问vector的。
从来不作 2014-10-24
  • 打赏
  • 举报
回复
引用 14 楼 mymtom 的回复:
当然是方法1啊 方法2不行的
vector不是连续存储的吗?
mymtom 2014-10-24
  • 打赏
  • 举报
回复
当然是方法1啊 方法2不行的
罗博士 2014-10-23
  • 打赏
  • 举报
回复
使用<algorithm>的copy
孤影品茗 2014-10-23
  • 打赏
  • 举报
回复
引用 楼主 banshichiqinglangzi 的回复:
现有vector<float> d1,vector< vector<float> > d2,想把d2[0]赋给d1,我有两种思路。 1. d1 = d2[0] 2. memcpy(&d1[0],&d2[0][0],size) 大家觉得哪种方法快呢
方法2不行,因为,stl的对象,内存是不连续的,这样会导致内存错误
赵4老师 2014-10-23
  • 打赏
  • 举报
回复
方法2不可行,因为vector是对象不是一段内存。
bianfuba 2014-10-23
  • 打赏
  • 举报
回复
我觉得是第二种。。

64,636

社区成员

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

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