3

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

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

这里 arr 是 100 个整数的数组。vect 是一个包含整数的向量。上面这段代码有什么问题?

4

4 回答 4

3

的参数std::back_inserter必须支持push_back()运算,并且int不支持并且 anintvect[offset](假设vect是 a vector<int>)的结果。

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

于 2012-09-06T08:04:17.487 回答
2

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

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

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

于 2012-09-06T08:04:42.840 回答
2

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

vect.insert(vect.begin() + offset, arr,&arr[100]);
于 2012-09-06T08:06:19.170 回答
1

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

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

于 2012-09-06T08:04:05.363 回答