据我所知,一个 vector 保证是连续的,我可以向它写入一大块内存并用它发送 fwrite。我需要做的就是确保我调用 .resize() 强制它成为我需要的最小长度然后我可以将它用作普通的 char 数组?这段代码是否正确
v.resize(numOfElements);
v.clear(); //so i wont get numOfElements + len when i push back
vector<char>v2;
v2.resize(numOfElements*SizeOfType);
while(...)
{
...
v.push_bacK(x);
}
compress(&v2[0], len, &v[0], len);
fwrite(&v2[0], ....)
请注意,我从不退回或弹出 v2,我只调整了一次大小并将其用作 char 数组。这样安全吗?如果我也转储 v 那也是安全的(我确实推回并清除,我可能会转储它进行测试)
v.resize(numOfElements);
v.clear(); //so i wont get numOfElements + len when i push back
好吧,上面的代码片段实际上是在分配和创建元素,只是为了再次销毁它们。它实际上与以下内容相同:
v.reserve(numOfElements);
只是这段代码要快得多。因此,在这两种情况下,v.size() == 0
和 v.capacity()
可能与 numOfElements
在这两种情况下也是如此(尽管这不能保证)。然而,在第二种情况下,容量至少为 numOfElements,这意味着内部缓冲区将不会重新分配,直到您将那么多元素 push_back 到 vector 中。请注意,在这两种情况下,如果您尝试访问任何元素,它都是无效 - 因为实际上包含零个元素。
除此之外,我没有发现您的代码有任何问题。它是安全的,我会鼓励它,所以使用它而不是原始的 new
或 malloc
因为它提供了额外的安全性。但是,我不确定“转储 v”是什么意思。
我是一名优秀的程序员,十分优秀!