![]() |
1
362
实际上有很多方法。
C++ 03
C++ 11与更高
|
![]() |
2
30
Prason已经提供了许多不同的(和好的)方法来实现这一点,这些方法都不需要在这里重复。不过,我想建议另一种速度方法。
如果你要做的比较多,你可能会考虑对你的向量进行“子分类”,这样一个元素的总和就可以单独维护(而不是
事实上
子类向量,由于缺少虚拟析构函数而不确定——我说的更多是一个包含和和和和向量的类,
对于空向量,总和设置为零。在每次插入向量时,将要插入的元素添加到和中。每次删除都要减去它。基本上, 任何东西 这样就可以改变底层向量被截取,以确保总和保持一致。 这样,您就有了一个非常有效的O(1)方法来“计算”任何时间点的总和(只需返回当前计算的总和)。在调整总数时,插入和删除将花费稍长的时间,您应该考虑这个性能影响。 由于计算总和的成本分摊到所有访问中,所以需要总和的向量比改变向量的频率更高,因此这些向量可能会从该方案中受益。显然,如果你每小时只需要求和,而向量每秒变化三千次,那么它就不合适了。 这样就足够了:
显然,这是伪代码,您可能希望有更多的功能,但它显示了基本概念。 |
![]() |
3
22
当你能做的时候为什么要向前求和呢? 向后的 ?鉴于:
我们可以使用订阅,倒数:
我们可以使用范围检查“订阅”,倒数(以防万一):
我们可以在for循环中使用反向迭代器:
我们可以在for循环中使用前向迭代器,向后迭代(噢,很棘手!):
我们可以使用
我们可以使用
所以,正如你所看到的,有很多方法可以把向量向后求和,就像把向量向前求和一样,其中一些方法更令人兴奋,并且提供了更大的出错机会。 |
![]() |
4
14
|
![]() |
5
10
最简单的方法是使用
|
![]() |
6
5
C++0X仅:
这类似于其他地方提到的boost-for each,在更复杂的情况下,与使用accumulate或for-each的有状态函数相比,它具有相同的清晰性优势。 |
![]() |
7
5
我是一个Perl用户,一个游戏,我们要找到每种不同的方法来增加一个变量…在这里没什么不同。如何找到C++中向量元素之和的答案可能是
我的2分钱: 使用boost-foreach,摆脱难看的迭代器语法:
迭代索引(非常容易读取)。
另一个是破坏性的,像堆栈一样访问向量:
|
![]() |
8
2
还可以使用std::valarray,如下所示
有些人可能会发现这种方法效率不高,因为valarray的大小需要和向量的大小一样大,初始化valarray也需要一些时间。 在这种情况下,不要使用它,把它当作总结序列的另一种方法。 谢谢 |
![]() |
9
0
|
![]() |
10
-2
这很容易。C++ 11提供了一种总结向量元素的简单方法。
|
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
![]() |
quantumwell · 将空向量放入std::map() 7 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 7 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 7 年前 |