C++ vector的resize存在的坑

最近在项目中用到vector,用于发送文件数据到远端,由于文件很大所以不能一次读取发送,因此采用每次读取n个字节的数据到vector

代码类似是这样的:

ifstream in;

in.open(“file”,ios::in|ios::binary);

in.seekg(0,in.end);

uint32 totalSize = in.tellg();

in.seekg(0,in.beg);

uint32 readedSize = 0;

vector data;

data.resize(50);

while(1){

in.read(reinterpret_cast(data.data()), 50);

TransferToRemote(data);

if(data.size()<50)break;

data.clear();

}

运行之后发现陷入了死循环,打印了了readedSize发现值一直保持在50,所以无法跳出循环体;经过测试发现在data.clear() 调用之后,data.size()的值一直是0;原来vector的clear方法会将内部计数清零,而我以为在调用read向vector拷贝数据时会改变内部计数,其实是不会改变,而只是将数据拷贝过去,这里给出解决方法就是在读取数据后,调用vector的resize方法设置为读到数据的长度即可。

你可能感兴趣的:(C++ vector的resize存在的坑)