我正在尝试将数组的内容写入从偏移量开始的向量中。
std::copy(arr,&arr[100],std::back_inserter(vect[offset]);
这里 arr 是 100 个整数的数组。vect 是一个包含整数的向量。上面这段代码有什么问题?
的参数std::back_inserter
必须支持push_back()
运算,并且int
不支持并且 anint
是vect[offset]
(假设vect
是 a vector<int>
)的结果。
如果您可以使用迭代器而不是偏移量,则可以使用std::vector::insert()
.
std::back_inserter
在后面插入,而不是在偏移处。你想要的是std::inserter
,它需要(并更新)一个插入位置迭代器。
你可能想要std::inserter(vect, vect.begin() + offset)
.
请注意,这将在每个插入操作中重复重新定位尾部序列。正如@Nim 建议的那样,insert()
在这种情况下,直接操作更可取,因为它一步插入整个范围。
使用该insert()
函数,特别是采用偏移量和范围的变体:
vect.insert(vect.begin() + offset, arr,&arr[100]);
问题是它back_inserter
看起来像一个迭代器,但它调用push_back
了它的参数,它必须是一个支持 的容器push_back()
,而不是容器的元素。
如果要从偏移量插入,则必须找到与该位置对应的迭代器,并将其作为第三个参数传递给std::copy
,或使用std::vector::insert
. 当然,您必须确保容器足够大,即从offset_iterator
到末尾的范围至少为 size 100
。