CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

vector数据这样拷贝行不行啊?

楼主westhod(岚)2006-11-03 19:50:25 在 C/C++ / C++ 语言 提问

比如说这样的一个结构  
  struct  
  {  
        byte   first;  
        vector<byte>   second;  
  }tagS;  
   
  tagS   *ch   =   new   tagS;  
   
  然后我定义一个   byte   *p;  
  它已经接收了一些数据,比如说已经有了3个byte的数据  
  然后我用memcpy拷贝数据到ch中  
  memcpy(ch,p,sizeof(byte)*3)  
  我试过了,vector的size为0啊  
  怎么会这样呢?怎么样才可以实现把数据拷贝啊???  
   
  问题点数:20、回复次数:5Top

1 楼wqf363(denny)回复于 2006-11-03 19:56:49 得分 5

ch->second.insert(*p);     拷值到vector要用insert,vector的成员函数Top

2 楼pcboyxhy(-273.15℃)回复于 2006-11-03 19:58:45 得分 5

你这是浅copy  
  必须深copy才可以  
  vector有自己内存管理方式  
   
  tagS类型的对象大小是固定的  
  不会随着vector的增长而增长  
   
  对于含有指针或者需要分配资源的类  
  你需要定义自己的   构造函数     析构函数  
  并且需要重载=运算符  
   
  这里你可以试试   vector的插入迭代器  
  或者直接使用copy,   push_back等算法  
  Top

3 楼wjwjwj(wangj)回复于 2006-11-03 20:12:11 得分 5

其实,在你tagS   *ch   =   new   tagS;语句后,vector中并没有获得容纳数据的空间,那你用memcpy的时候数据当然不能拷贝到vector中。  
   
  你可以按下面的写:  
   
  ch->first   =   p[0];  
   
  for(int   i=1;   i<3;   ++i)  
  {  
          ch->second.push_back(p[i]);  
  }  
   
   
   
  Top

4 楼OOPhaisky(异化$渴望成功~~)回复于 2006-11-03 20:31:17 得分 5

memcpy(ch,p,sizeof(byte)*3)  
  -------------------------------------------------------------------------------------  
  这仅仅是将ch后面3bytes的东西拷贝到p所指向的内存。first成员会被正确覆盖,但是vector成员会出问题。  
  首先,你不知道vector对象内部的内存布局;  
  其次,即使你能够确定vector对象内部的正确内存布局,也许你会拷贝成功(拷贝到正确的地方),但是vector的size函数仍然返回0,因为vector并不知道他内部已经有数据了,因为这些数据是通过“非法途径”得来的,vector本身全然不知,只有通过vector的成员函数(比如insert)加入的成员才会被vector知晓。Top

5 楼westhod(岚)回复于 2006-11-04 09:35:04 得分 0

哦,谢谢大家意见Top

相关问题

关键词

得分解答快速导航

  • 帖主:westhod
  • wqf363
  • pcboyxhy
  • wjwjwj
  • OOPhaisky

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo