当插入多个元素时,向量大小仅增加一

神秘人物

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

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 是另一个向量,其中所有向量的大小都已达到20。此函数始终返回当前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::vector指出:

通过在指定位置的元素之前插入新元素来扩展向量,从而通过插入的元素数量有效地增加容器大小。

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

我在第一个断点处获得了这些值: 第一个断点的值

在第二个断点处size仅增加了一个:第二个断点的值

但是,在while循环的第二遍,然后尝试插入另外十二个值(size仍然为8 20 - 8 == 12):第一个断点的值(第二遍)

然后大小突然跳到22: 第二个断点的值(第二遍)

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

慈济

在此片段中:

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

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

您正在插入 fromPtr值的副本toPtr(即重载(3))。从您的描述看来,您的意思是使用重载(4):

super::current.insert(super::current.end(), vec + pos, vec + to);

将元素从复制vecsuper::current

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向量大小不会随着变量的增加而增加

来自分类Dev

在“释放”模式下访问时,向量大小为0

来自分类Dev

如何在不增加向量大小的情况下保留多维向量?

来自分类Dev

当向量中唯一元素的数量远小于向量大小时,有效处理向量的每个唯一排列

来自分类Dev

分配向量大小与保留向量大小

来自分类Dev

动态向量大小分配

来自分类Dev

C ++特征向量在类编译时推断向量大小

来自分类Dev

向量大小-C ++中大小为0时为1

来自分类Dev

如何在多个线程中仅一次插入向量

来自分类Dev

C ++:按向量大小的重载函数

来自分类Dev

C ++向量大小为零

来自分类Dev

MATLAB中的向量大小不匹配

来自分类Dev

向量大小在for循环中创建问题

来自分类Dev

向量大小太大时,如何解决C ++中内存不足的问题?

来自分类Dev

在向量中的同一位置插入多个元素

来自分类Dev

在运行时设置向量的向量大小

来自分类Dev

调整向量的向量大小会导致段错误

来自分类Dev

计算向量的向量大小(以字节为单位)

来自分类Dev

word2vec 中的词汇大小与向量大小

来自分类Dev

在for循环中增加向量的大小

来自分类Dev

如何增加gpuArray最大变量大小

来自分类Dev

调整向量大小时将调用对象的构造函数

来自分类Dev

R中的dist()函数:向量大小限制

来自分类Dev

返回值因向量大小而异

来自分类Dev

向量大小在for循环中填充后返回0

来自分类Dev

采用分治法的最小子向量大小k

来自分类Dev

调整2D向量大小-错误

来自分类Dev

c ++向量大小和容量输出相同的值

来自分类Dev

向量大小受std :: cin影响吗?