オブジェクトmemory
には署名付きのメソッドがあります
BinaryPattern const& getPattern(unsigned int index) const;
これを次の for ループで使用しています。
for (unsigned int k = 0; k < memory->size(); k++) {
const BinaryPattern s = memory->getPattern(k);
w += s.at(i) * s.at(j);
}
これは非常に遅いです。驚いたことに、次のほうがはるかに高速であることがわかりました。
for (unsigned int k = 0; k < memory->size(); k++) {
w += memory->getPattern(k).at(i) * memory->getPattern(k).at(j);
}
「getPattern()」は計算を行わず、ベクトルに格納されているパターンを返すだけです。
参照を変数に格納すると、なぜこんなに遅くなるのでしょうか? 参照を2回取得すると遅くなると予想していたので、最初はこれを高速化するために行いました。