vector数据这样拷贝行不行啊?
比如说这样的一个结构
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




