我有一个 std::vector 值,我知道其最大大小,但实际大小在使用过程中会有所不同:
void setupBuffer(const size_t maxSize) {
myVector.reserve(maxSize);
}
void addToBuffer(const Value& v) {
myVector.push_back(v);
if (myVector.size() == maxSize) {
// process data...
myVector.clear();
}
}
但是,在 setupBuffer 中,我需要获取指向 myVector 数据开头的指针。我正在使用第三方库,我必须预先缓存该指针,以便在“处理数据...”部分期间进行的调用中使用。
void setupBuffer(const size_t maxSize) {
myVector.reserve(maxSize);
cachePtr(&(myVector[0])); // doesn't work, obviously
}
我不想预先 resize() 向量,因为我想使用 vector.size() 来表示添加到向量中的元素数量。
那么,有什么方法可以在分配(reserve())之后但在它有任何元素之前获取指向向量缓冲区的指针吗?我想象缓冲区存在(并且只要我限制 push_back'd 值的数量就不会移动)......也许这不能保证?
调用保留后,向量缓冲区将不会移动,除非超出保留容量。您的问题是获取指向第一个元素的指针。显而易见的答案是将单个假条目推入向量中,获取指向它的指针,然后将其删除。
更好的方法是,如果库接受函子而不是指针,它会在需要访问缓冲区时调用它 - 您可以使函子推迟获取地址,直到缓冲区有一些实际内容。然而,我意识到你没有重写图书馆的奢侈。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)