gpt4 book ai didi

c++ - vector 和倾销

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:27 26 4
gpt4 key购买 nike

据我所知,一个 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() == 0v.capacity() 可能与 numOfElements 在这两种情况下也是如此(尽管这不能保证)。然而,在第二种情况下,容量至少为 numOfElements,这意味着内部缓冲区将不会重新分配,直到您将那么多元素 push_back 到 vector 中。请注意,在这两种情况下,如果您尝试访问任何元素,它都是无效 - 因为实际上包含零个元素。

除此之外,我没有发现您的代码有任何问题。它是安全的,我会鼓励它,所以使用它而不是原始的 newmalloc 因为它提供了额外的安全性。但是,我不确定“转储 v”是什么意思。

关于c++ - vector 和倾销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com