for (int i=0; i<N; ++i) m[i] -= x.m[i];
return *this;
}
// ΡΠΊΠ°Π»ΡΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
self& operator=(value_type x) {
std::fill(begin(), end(), x);
return *this;
}
self& operator+=(value_type x) {
for (int i=0; i<N; ++i) m[i] += x;
return *this;
}
self& operator-=(value_type x) {
for (int i=0; i<N; ++i) m[i] -= x;
return *this;
}
self& operator*=(value_type x) {
for (int i=0; i<N; ++i) m[i] *= x;
return *this;
}
self& operator/=(value_type x) {
for (int i=0; i<N; ++i) m[i] /= x;
return *this;
}
self& operator%=(value_type x) {
for (int i=0; i<N; ++i) m[i] %= x;
return *this;
}
self operator-() {
self x;
for (int i=n; i<N; ++i) x.m[i] = -m[i];
return x;
}
// Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
friend self operator+(self x, const self& y) { return x += Ρ; }
friend self operator-(self x, const self& y) { return x -= y; }
friend self operator+(self x, value_type y) { return x += y; }
friend self operator-(self x, value_type y) { return x -= y; }
friend self operator*(self x, value_type y) { return x *= y; }
friend self operator/(self x, value_type y) { return x /= y; }
friend self operator%(self x, value type y) { return x %= y; }
};
ΠΡΠΈΠΌΠ΅Ρ 11.18 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ»Π°ΡΡΠ° kvector.
ΠΡΠΈΠΌΠ΅Ρ 11.18. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡΠΎΡΠ° kvector
#include "kvector.hpp"
#include <algorithm>
#include <numeric>
#include <iostream>
using namespace std;
int main() {
kvector<int, 4> v = { 1, 2, 3, 4 };
cout << "sum = " << accumulate(v.begin(), v.end(), 0) << endl;
v *= 3;
cout << "sum = " << accumulated.begin(), v.end(), 0) << endl;
v += 1;
cout << "sum = " << accumulate(v.begin(), v.end(), 0) << endl;
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ° 11.18 Π²ΡΠ΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
sum = 10
sum = 30
sum = 34
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 11.17 ΡΠ°Π±Π»ΠΎΠ½ kvector ΡΠ²Π»ΡΠ΅ΡΡΡ Π³ΠΈΠ±ΡΠΈΠ΄ΠΎΠΌ valarray ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² TR1. ΠΠ°ΠΊ ΠΈ valarray, Π²Π΅ΠΊΡΠΎΡ kvector ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ TR1::array Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° kvector ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π΄Π»Ρ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΈ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ begin ΠΈ end. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ kvector ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Ρ.Π΅. ΠΎΠ½ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅ΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. Π‘Π»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ β Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ kvector Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ valarray.
ΠΡΡΠ³ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° kvector ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
int x;
kvector<int, 3> k = { x = 1, x+2, 5}
ΠΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ kvector ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π³ΡΠ΅Π³Π°ΡΠΎΠΌ. ΠΠ³ΡΠ΅Π³Π°Ρ (aggregate) β ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ², Π·Π°ΠΊΡΡΡΡΡ ΠΈΠ»ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ -ΡΠ»Π΅Π½ΠΎΠ², Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ kvector Π΅Π³ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
kvector<int, 3> k = {};
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠΎΡ Π²Π΅ΠΊΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Π½ΡΠ»ΡΠΌΠΈ.
ΠΠ°ΠΊ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ½ΠΎΠΉ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΠ΅ΠΌΡΡ ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌ, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ ΠΏΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° array, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠ΅Π³ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ TR1.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΌΠΎΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ kvector Π½Π°Π΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ° ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π΅Π³ΠΎ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ ΡΠ°Π±Π»ΠΎΠ½ kvector Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ²: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΈ Π·Π΄Π΅ΡΡ Π½Π΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ. Π Π°Π·Π»ΠΈΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 2Γ2 ΠΈΠ»ΠΈ 3Γ3), ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ .
Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΈΠΌΡ Β«selfΒ», Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ typedef?ΠΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ typedef ΠΈΠΌΡ self Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 11.17 ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ; ΠΎΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠΈΠΏ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΈ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ self Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ°.
11.10. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ
ΠΠΌΠ΅Π΅ΡΡΡ Π΄Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΠΈΡΠ»Π°, ΠΏΡΠΈΡΠ΅ΠΌ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π΄Π»ΠΈΠ½Ρ, ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΈΡ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠΈΠΌΠ΅Ρ 11.19 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ inner_product ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° <numeric>.
ΠΡΠΈΠΌΠ΅Ρ 11.19. Π Π°ΡΡΠ΅Ρ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ
#include <numeric>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int v1[] = { 1, 2, 3 };
int v2[] = { 4, 6, 8 };
cout << "the dot product of (1,2,3) and (4,6,8) is ";
cout << inner_product(v1, v1 + 3, v2, 0) << endl;
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ° 11.19 Π²ΡΠ΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
the dot product of (1,2,3) and (4,6,8) is 40
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π‘ΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ (dot product) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠΎΡΠΌ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ (inner product), Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ Π΅Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΡΠΌ ΡΠΊΠ°Π»ΡΡΠ½ΡΠΌ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ (Euclidean Inner Product). Π€ΡΠ½ΠΊΡΠΈΡ inner_product ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
template<class In, class In2, class T>
T inner_product(In first, In last, In2 first2, T init);
template<class In, class In2, class T, class BinOp, class BinOp2>
T inner_product(In first, In last, In2 first2, T init, BinOp op, BinOp2 op2);
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ inner_product ΡΡΠΌΠΌΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π²ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ². ΠΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ inner_product ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΡΠ°ΠΌΠΎΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π°Π΄ ΠΏΠ°ΡΠΎΠΉ ΡΠΈΡΠ΅Π» ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 11.20 ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Π° ΠΏΡΠΎΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ inner_product.
ΠΡΠΈΠΌΠ΅Ρ 11.20. ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ inner_product()
template<class In, class In2, class T, class BinOp, class BinOp2>
T inner_product(In first, In last, In2 first2, T init, BinOp op, Binop2 op2) {
while (first != last) {
BinOp(init, BinOp2(*first++, *first2++));
}
return init;
}
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ inner_product Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅Π»Π΅ΠΉ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΡΠ° ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½ΠΎΡΠΌΡ Π²Π΅ΠΊΡΠΎΡΠ°).
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡΡ 11.11 ΠΈ 11.12.
11.11. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½ΠΎΡΠΌΡ Π²Π΅ΠΊΡΠΎΡΠ°
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ Π½ΠΎΡΠΌΡ (Ρ. Π΅. Π΄Π»ΠΈΠ½Ρ) ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ°.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ inner_product ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° <numeric> Π΄Π»Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° Π½Π° ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 11.21.
ΠΡΠΈΠΌΠ΅Ρ 11.21. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½ΠΎΡΠΌΡ Π²Π΅ΠΊΡΠΎΡΠ°
#include <numeric>
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;
template<typename Iter_T>
long double vectorNorm(Iter_T first, Iter_T last) {
return sqrt(inner_product(first, last, first, 0.0L));
}
int main() {
int v[] = { 3, 4 };
cout << "The length of the vector (3.4) is ";
cout << vectorNorm(v, v + 2) << endl;
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ° 11.21 Π²ΡΠ΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
The length of the vector (3,4) is 5
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 11.21 ΡΡΠ½ΠΊΡΠΈΡ inner_product ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° <numeric> ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ° Π½Π° ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ. ΠΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΡΠΌΠΎΠΉ Π²Π΅ΠΊΡΠΎΡΠ°, ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ Π²Π΅ΠΊΡΠΎΡΠ°.
ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π² ΡΡΠ½ΠΊΡΠΈΠΈ vectorNorm Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ, Ρ ΡΠ΅ΡΠΈΠ» Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏ long double, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ Π²Π΅ΠΊΡΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π½ΠΎΡΠΌΠ° Π²Π΅ΠΊΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΠ΅Π»ΡΠΌ ΡΠΈΠΏΠΎΠΌ.
11.12. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ Π΅Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ ΡΡΠΌΠΌΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΡΠ°Π·Π½ΠΎΡΡΠ΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π Π°ΡΡΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 11.22.