有时,使用std::vector的起始地址并将该地址临时视为定期分配的缓冲区的地址是很有用的。
例如,替换为:
char* buf = new char[size];
fillTheBuffer(buf, size);
useTheBuffer(buf, size);
delete[] buf;有了这个:
vector<char> buf(size);
fillTheBuffer(&buf[0], size);
useTheBuffer(&buf[0], size);这样做的好处当然是缓冲区是自动释放的,我不必担心delete[]。
我遇到的问题是当大小为== 0时。在这种情况下,第一个版本可以正常工作。一个空的缓冲区被“分配”,随后的函数不做任何事情,它们的大小为== 0。
但是,如果size ==为0,则第二个版本会失败,因为调用buf[0]可能会正确地包含0 < size断言。
那么,有没有一种方法可以替代习惯用法&buf[0],即使向量为空也可以返回向量开始的地址?
我也考虑过使用buf.begin(),但根据标准,它甚至不能保证返回一个指针。
发布于 2010-04-29 03:04:28
如果您可以将fillTheBuffer和useTheBuffer更改为一对迭代器,那么您将以标准库解决问题的相同方式来解决问题。
https://stackoverflow.com/questions/2728255
复制相似问题