numeric
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
std::numeric
-----
#contents
-----
*numeric [#c857441a]
numericにはコンテナに対する数値的な操作を行う4つの関数が...
#include <numeric>
***総和(accumulate) [#i2b1bed1]
template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, ...
template <class InputIterator, class T, class BinaryOper...
T accumulate(InputIterator first, InputIterator last, ...
範囲[first, last)内の値の総和を計算する.initは初期値.
和以外のオペレーションを行いたい場合は,2つめの定義でbina...
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int mul(int x, int y)
{
return x*y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10];
for(int i = 0; i < 10; ++i){
a[i] = i;
b[i] = i+1;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
int result1 = accumulate(a.begin(), a.end(), 0);
int result2 = accumulate(b, b+10, 1, mul);
cout << result1 << endl;
cout << result2 << endl;
return 0;
}
}}
実行結果
a : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
b : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
45
3628800
***要素間差分(adjacent_difference) [#b4f57f9d]
template <class InputIterator, class OutputIterator>
OutputIterator adjacent_difference(InputIterator first...
template <class InputIterator, class OutputIterator, cla...
OutputIterator adjacent_difference(InputIterator first...
範囲[first, last)の各要素間の差を計算して,resultに格納す...
x[0], x[1], x[2], ...
とするとresultには
x[0], x[1]-x[0], x[2]-x[1], ...
が格納される.
差以外のオペレーションを行いたい場合は,2つめの定義でbina...
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int add(int x, int y)
{
return x+y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10];
for(int i = 0; i < 10; ++i){
a[i] = i;
b[i] = i;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
vector<int> result1;
result1.resize(10);
int result2[10];
adjacent_difference(a.begin(), a.end(), result1.begin());
adjacent_difference(b, b+10, result2, add);
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << result1[i] << (i == ...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << result2[i] << (i == ...
cout << endl;
return 0;
}
}}
実行結果
a : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
b : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
a : 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
b : 0, 1, 3, 5, 7, 9, 11, 13, 15, 17
***内積(inner_product) [#lf387ea2]
template <class InputIterator1, class InputIterator2, cl...
T inner_product(InputIterator1 first1, InputIterator1 ...
template <class InputIterator1, class InputIterator2, cl...
T inner_product(InputIterator1 first1, InputIterator1 ...
BinaryOperation1 binary_op1, BinaryO...
first1, first2で指定されたコンテナの各要素の積の総和(要す...
デフォルトは和と積の組み合わせだが,2つめの定義でbinary_o...
この場合関数内では,
while(first! != last1) init = binary_op1(init, binary_op...
のように計算される(デフォルトは,init = init+(*first1++)*...
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int add(int x, int y)
{
return x+y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10], c[10];
for(int i = 0; i < 10; ++i){
a[i] = i;
b[i] = i+1;
c[i] = 10-i;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
cout << "c : ";
for(int i = 0; i < 10; ++i) cout << c[i] << (i == 9 ? ""...
cout << endl;
int result1 = inner_product(a.begin(), a.end(), a.begin(...
int result2 = inner_product(b, b+10, c, 0, add, add);
cout << result1 << endl;
cout << result2 << endl;
return 0;
}
}}
実行結果
a : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
b : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
c : 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
285
110
***Prefix Sum(partial_sum) [#sab19ecf]
template <class InputIterator, class OutputIterator>
OutputIterator partial_sum(InputIterator first, InputI...
template <class InputIterator, class OutputIterator, cla...
OutputIterator partial_sum(InputIterator first, InputI...
範囲[first, last)内の要素のpartial sum (もしくはprefix su...
x[0], x[1], x[2], ...
とするとresultには
x[0], x[0]+x[1], x[0]+x[1]+x[2], ...
が格納される.
binary_opを指定することで和以外のオペレーションも行える.
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int mul(int x, int y)
{
return x*y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10];
for(int i = 0; i < 10; ++i){
a[i] = 1;
b[i] = i+1;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
vector<int> result1;
result1.resize(10);
int result2[10];
partial_sum(a.begin(), a.end(), result1.begin());
partial_sum(b, b+10, result2, mul);
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << result1[i] << (i == ...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << result2[i] << (i == ...
cout << endl;
return 0;
}
}}
実行結果
a : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
b : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
a : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
b : 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800
終了行:
std::numeric
-----
#contents
-----
*numeric [#c857441a]
numericにはコンテナに対する数値的な操作を行う4つの関数が...
#include <numeric>
***総和(accumulate) [#i2b1bed1]
template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, ...
template <class InputIterator, class T, class BinaryOper...
T accumulate(InputIterator first, InputIterator last, ...
範囲[first, last)内の値の総和を計算する.initは初期値.
和以外のオペレーションを行いたい場合は,2つめの定義でbina...
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int mul(int x, int y)
{
return x*y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10];
for(int i = 0; i < 10; ++i){
a[i] = i;
b[i] = i+1;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
int result1 = accumulate(a.begin(), a.end(), 0);
int result2 = accumulate(b, b+10, 1, mul);
cout << result1 << endl;
cout << result2 << endl;
return 0;
}
}}
実行結果
a : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
b : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
45
3628800
***要素間差分(adjacent_difference) [#b4f57f9d]
template <class InputIterator, class OutputIterator>
OutputIterator adjacent_difference(InputIterator first...
template <class InputIterator, class OutputIterator, cla...
OutputIterator adjacent_difference(InputIterator first...
範囲[first, last)の各要素間の差を計算して,resultに格納す...
x[0], x[1], x[2], ...
とするとresultには
x[0], x[1]-x[0], x[2]-x[1], ...
が格納される.
差以外のオペレーションを行いたい場合は,2つめの定義でbina...
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int add(int x, int y)
{
return x+y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10];
for(int i = 0; i < 10; ++i){
a[i] = i;
b[i] = i;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
vector<int> result1;
result1.resize(10);
int result2[10];
adjacent_difference(a.begin(), a.end(), result1.begin());
adjacent_difference(b, b+10, result2, add);
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << result1[i] << (i == ...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << result2[i] << (i == ...
cout << endl;
return 0;
}
}}
実行結果
a : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
b : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
a : 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
b : 0, 1, 3, 5, 7, 9, 11, 13, 15, 17
***内積(inner_product) [#lf387ea2]
template <class InputIterator1, class InputIterator2, cl...
T inner_product(InputIterator1 first1, InputIterator1 ...
template <class InputIterator1, class InputIterator2, cl...
T inner_product(InputIterator1 first1, InputIterator1 ...
BinaryOperation1 binary_op1, BinaryO...
first1, first2で指定されたコンテナの各要素の積の総和(要す...
デフォルトは和と積の組み合わせだが,2つめの定義でbinary_o...
この場合関数内では,
while(first! != last1) init = binary_op1(init, binary_op...
のように計算される(デフォルトは,init = init+(*first1++)*...
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int add(int x, int y)
{
return x+y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10], c[10];
for(int i = 0; i < 10; ++i){
a[i] = i;
b[i] = i+1;
c[i] = 10-i;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
cout << "c : ";
for(int i = 0; i < 10; ++i) cout << c[i] << (i == 9 ? ""...
cout << endl;
int result1 = inner_product(a.begin(), a.end(), a.begin(...
int result2 = inner_product(b, b+10, c, 0, add, add);
cout << result1 << endl;
cout << result2 << endl;
return 0;
}
}}
実行結果
a : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
b : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
c : 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
285
110
***Prefix Sum(partial_sum) [#sab19ecf]
template <class InputIterator, class OutputIterator>
OutputIterator partial_sum(InputIterator first, InputI...
template <class InputIterator, class OutputIterator, cla...
OutputIterator partial_sum(InputIterator first, InputI...
範囲[first, last)内の要素のpartial sum (もしくはprefix su...
x[0], x[1], x[2], ...
とするとresultには
x[0], x[0]+x[1], x[0]+x[1]+x[2], ...
が格納される.
binary_opを指定することで和以外のオペレーションも行える.
コード例
#code(C){{
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int mul(int x, int y)
{
return x*y;
}
int main(void)
{
vector<int> a;
a.resize(10);
int b[10];
for(int i = 0; i < 10; ++i){
a[i] = 1;
b[i] = i+1;
}
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << a[i] << (i == 9 ? ""...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << b[i] << (i == 9 ? ""...
cout << endl;
vector<int> result1;
result1.resize(10);
int result2[10];
partial_sum(a.begin(), a.end(), result1.begin());
partial_sum(b, b+10, result2, mul);
cout << "a : ";
for(int i = 0; i < 10; ++i) cout << result1[i] << (i == ...
cout << endl;
cout << "b : ";
for(int i = 0; i < 10; ++i) cout << result2[i] << (i == ...
cout << endl;
return 0;
}
}}
実行結果
a : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
b : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
a : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
b : 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800
ページ名: