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