此问题已在此处有答案:
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))
你能解释一下为什么最后一个有效,而第一个无效?
1条答案
按热度按时间5hcedyr01#
std::partial_sum
需要一个有效的迭代器来填充结果(如果结果包含多个元素,迭代器应该是这样的,你可以根据要填充的元素数量递增)。在第一种情况下,
temp
是空的,并保持这种状态。迭代器temp.begin()
没有引用任何要填充的有效元素。在第二种情况下,您使用
std::back_interter
,它构造了一个std::back_insert_iterator
。这个迭代器在vector
上调用push_back
来添加新元素,因此是std::partial_sum
填充vector
的有效迭代器。