gpt4 book ai didi

c++ - 当插入多个元素时, vector 大小仅增加一

转载 作者:行者123 更新时间:2023-12-01 14:39:31 25 4
gpt4 key购买 nike

我目前正在学习C++,为了实现当前的目标,我想将vector A中的值填充到vector X中。 vector X不得大于20。要对此进行存档,我有一个函数可以检查当前 vector 是否还有空间。如果没有剩余空间,它将用模板中的新 vector 替换当前 vector (该模板已经包含一些条目,所有 vector 都必须相同):

int ChunkedBufferBuilder::checkNewBuffer() {
int space_left = chunk_size - super::current.size();
if (space_left == 0) {
bufVec.push_back(super::current);
super::current = tpl;
space_left = chunk_size - super::current.size() ;
}

return space_left;
}
bufVec是另一个 vector ,其中所有 vector 的大小都已达到20。此函数始终返回当前Vector中剩余的“免费”条目。

为了避免必须将输入 vector 中的每个单个值插入较小的 vector 中,我尝试在此处使用 insert函数:

ChunkedBufferBuilder* ChunkedBufferBuilder::push_back(const std::vector<uint8_t> &vec) {
auto pos = 0;
const auto size = vec.size();

while (pos < size) {
const int space_left = checkNewBuffer();
const int to = (space_left > size - pos) ? size : pos + space_left;
auto fromPtr = vec.at(pos);
auto toPtr = vec.at(to);

int size = super::current.size();

super::current.insert(super::current.end(), fromPtr, toPtr);

size = super::current.size();

pos = to;
}

return this;
}

请注意,第二个 size = super::current.size()由我放置在此处,以帮助调试。在以下图像中,我设置了两个断点。一个在调用 insert的行上,另一个在 pos = to分配的行上。
std::vectordocumentation指出:

The vector is extended by inserting new elements before the element at the specified position, effectively increasing the container size by the number of elements inserted.



因此,我希望大小会随着元素数量的增加而增加。但是当我运行调试器时:

我在第一个断点处获得了这些值:
Values of first breakpoint

在第二个断点处, size仅增加了一个:
Values of second breakpoint

但是,在while循环的第二遍,它然后尝试插入另外十二个值( size仍然是8,所以 20 - 8 == 12):
Values of first breakpoint (second pass)

然后大小突然跳到22:
Values of second breakpoint (second pass)

这目前正在破坏我的程序,我几乎不知道为什么我的代码会以当前的方式运行。

最佳答案

在此片段中:

auto fromPtr = vec.at(pos);
auto toPtr = vec.at(to);

super::current.insert(super::current.end(), fromPtr, toPtr);

您是 fromPtr值的 inserting toPtr副本(即重载(3))。从您的描述看来,您的意思是使用重载(4):
super::current.insert(super::current.end(), vec + pos, vec + to);

将元素从 vec复制到 super::current

关于c++ - 当插入多个元素时, vector 大小仅增加一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61465252/

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