首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:获取std::vector的起始地址?

C++:获取std::vector的起始地址?
EN

Stack Overflow用户
提问于 2010-04-28 17:36:33
回答 4查看 2.9K关注 0票数 6

有时,使用std::vector的起始地址并将该地址临时视为定期分配的缓冲区的地址是很有用的。

例如,替换为:

代码语言:javascript
复制
 char* buf = new char[size];
 fillTheBuffer(buf, size);
 useTheBuffer(buf, size);
 delete[] buf;

有了这个:

代码语言:javascript
复制
 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(),但根据标准,它甚至不能保证返回一个指针。

EN

Stack Overflow用户

发布于 2010-04-29 03:04:28

如果您可以将fillTheBuffer和useTheBuffer更改为一对迭代器,那么您将以标准库解决问题的相同方式来解决问题。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2728255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档