将数组的内容从偏移量写入c++向量

writing contents of an array into a c++ vector from an offset

本文关键字:c++ 向量 偏移量 数组      更新时间:2023-10-16

我正试图将数组的内容写入从偏移量开始的向量中。

std::copy(arr,&arr[100],std::back_inserter(vect[offset]);

这里arr是100个整数的数组。vect是包含整合素的载体。上面的代码有什么问题?

std::back_inserter的自变量必须支持push_back()运算,而int不支持,并且intvect[offset]的结果(假设vectvector<int>)。

如果可以使用迭代器而不是偏移量,则可以使用std::vector::insert()

使用insert()函数,特别是采用偏移量和范围的变量:

vect.insert(vect.begin() + offset, arr,&arr[100]);

std::back_inserter在后面插入,而不是在偏移处。您需要的是std::inserter,它接受(并更新)插入位置迭代器。

你可能想要std::inserter(vect, vect.begin() + offset)

请注意,这将在每次插入操作中重复重新定位尾部序列。正如@Nim所建议的,在这种情况下,直接的insert()操作是优选的,因为它在一步中插入整个范围。

问题是back_inserter看起来像迭代器,但它在其参数上调用push_back,该参数必须是支持push_back()的容器,而不是容器的元素。

如果要从偏移量插入,则必须找到与该位置对应的迭代器,并将其作为第三个参数传递给std::copy,或者使用std::vector::insert的右重载。当然,您必须确保容器足够大,即从offset_iterator到末尾的范围至少为100大小。