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