我正在测试std :: vector上不同方式循环的速度.在下面的代码中,我考虑了5种方法来计算N = 10000000个元素的向量的所有元素的总和:
代码用g ++ for windows编译,用于编译的命令行是:
g++ -std=c++11 -O3 loop.cpp -o loop.exe
Run Code Online (Sandbox Code Playgroud)
我运行代码4次,测量每种方法的时间,我得到以下结果(时间以微秒为单位,最大值和最小值给出):
这些实验似乎表明的是:
循环使用迭代器与整数索引没有太大区别,至少在完全优化时是这样.
展开循环可以获得回报
令人惊讶的是,stl :: accumulate的性能更差.
虽然结论1和2是预期的,但数字3却相当令人惊讶.难道不是所有书都说使用STL算法而不是自己编写循环吗?
我在衡量时间或者解释结果的方式上是否犯了任何错误?如果您尝试下面给出的代码,你们有不同的情况吗?
#include <iostream>
#include <chrono>
#include <vector>
#include <numeric>
using namespace std;
using namespace std::chrono;
int main()
{
const int N = 10000000;
vector<int> v(N);
for (int i = 0; i<N; ++i)
v[i] = i; …Run Code Online (Sandbox Code Playgroud) 我需要在matlab中找到具有相同标签的值中的最大值,并且我试图避免使用for循环.
具体来说,我有一个L标签数组和一个V相同大小的值数组.我需要生成一个数组S,其中包含每个值L的最大值V.一个例子将更好地解释:
L = [1,1,1,2,2,2,3,3,3,4,4,4,1,2,3,4]
V = [5,4,3,2,1,2,3,4,5,6,7,8,9,8,7,6]
Run Code Online (Sandbox Code Playgroud)
然后,输出数组S的值将是:
s(1) = 9 (the values V(i) such that L(i) == 1 are: 5,4,3,9 -> max = 9)
s(2) = 8 (the values V(i) such that L(i) == 2 are: 2,1,2,8 -> max = 8)
s(3) = 7 (the values V(i) such that L(i) == 3 are: 3,4,5,7 -> max = 7)
s(4) = 8 (the values V(i) such that L(i) == …Run Code Online (Sandbox Code Playgroud)