将std::partial_sum的计算插入空向量(c++17)[重复]

3phpmpom  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(77)

此问题已在此处有答案

Am I using the copy_if wrong?(4个答案)
8天前关闭
我对C++很陌生,现在我正在尝试std::partial_sum算法。
我想计算现有向量的部分和,并将结果插入新的vector
我试着用这段代码来做到这一点:

vector<double> earnings = {1,2,3,4,5,6,7}
vector<double> temp;
std::partial_sum(earnings.begin() + 1, earnings.begin() + 3,  temp.begin())

但我有个分段错误。但另一种方法奏效了:

vector<double> earnings = {1,2,3,4,5,6,7}
vector<double> temp;
std::partial_sum(earnings.begin() + 1, earnings.begin() + 3,  std::back_inserter(temp))

你能解释一下为什么最后一个有效,而第一个无效?

5hcedyr0

5hcedyr01#

std::partial_sum需要一个有效的迭代器来填充结果(如果结果包含多个元素,迭代器应该是这样的,你可以根据要填充的元素数量递增)。
在第一种情况下,temp是空的,并保持这种状态。迭代器temp.begin()没有引用任何要填充的有效元素。
在第二种情况下,您使用std::back_interter,它构造了一个std::back_insert_iterator。这个迭代器在vector上调用push_back来添加新元素,因此是std::partial_sum填充vector的有效迭代器。

相关问题