Pat*_*rio 5 c++ arrays pointers
假设我想迭代一系列双打并求它们.我有两种方法可以做到这一点.
一个)
double sum (double * series, int size) {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += *series++;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
B)
double sum (double * series, int size) {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += series[i];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
这是更好的,为什么/何时我应该使用一个而不是另一个.
这是一个可读性问题,它不应该影响性能.我认为B是最可读的,因此更可取.
我还可以提出第三种变体,它是基于范围的(注意begin和end参数):
double sum (double* begin, double* end) {
double sum = 0.;
for (double* it = begin; it != end; ++it) {
sum += *it;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
在许多情况下,这是惯用的C++,并且更容易概括.这并不是说它总是更可取,它只是关于可读性和可维护性的问题的另一种变体.
我也会选择样式B,但是你应该更喜欢标准算法而不是显式循环:
#include <numeric>
double sum(const double* const series, const int size) {
return std::accumulate(series, series + size, 0.0);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |