对于我的矩阵类,我想在range-v3视图上进行某种运算符重载(可能使用表达式模板)+ - / * %.例如,如果我想获得两列总和的视图,我想写
col_1 + col_2
Run Code Online (Sandbox Code Playgroud)
代替
rv::zip_with([](auto c1, auto c2) {return c1 + c2;}, col_1, col_2);
Run Code Online (Sandbox Code Playgroud)
可能会使用本文中的一些想法来避免构造太多的临时工.这是我想写的代码:
//simple example
//what I want to write
auto rangeview = col_1 + col_2;
//what I can write
auto rangeview = rv::zip_with([](auto c1, auto c2) {
return c1 + c2;
}, col_1, col_2);
//itermediate
//what I want to write
auto rangeview = col_1 + col_2 + col_3;
//what I can write
auto rangeview = rv::zip_with([](auto c1, auto …Run Code Online (Sandbox Code Playgroud) 将7x5矩阵展平为std :: vector,我想使用Eric Niebler的range-v3库获取列和行的视图.到目前为止,我管理(改进的空间)以获得单行,单列和连接行的视图.
请参阅:https://wandbox.org/permlink/8o4RgSucF3zSNuPN
std::vector<int> numbers = {
00, 01, 02, 03, 04,
10, 11, 12, 13, 14,
20, 21, 22, 23, 24,
30, 31, 32, 33, 34,
40, 41, 42, 43, 44,
50, 51, 52, 53, 54,
60, 61, 62, 63, 64,
};
const size_t n = 5;//number of columns
//Row_3 = {30, 31, 32, 33, 34}
auto Row_3 = numbers | GetRow(3, n);
std::cout << Row_3 << std::endl;
//Col_2 = {02, 12, 22, 32, …Run Code Online (Sandbox Code Playgroud) 在 C++11 中,我想使用 std::partial_sum 计算向量的部分和。
std::vector<double> vec = {-1.0, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1};
std::partial_sum(vec.begin(), vec.end(), vec.begin());
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于双精度的舍入误差以及 0.1 没有精确表示为双精度,结果向量的最后一个条目是 1.38778E-16。
vec = {-1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 1.38778E-16};
Run Code Online (Sandbox Code Playgroud)
是否有机会在 std::partial_sum 中使用 Kahan 算法来减少舍入误差并获得更小的误差 - 类似于
std::partial_sum(vec.begin(), vec.end(), vec.begin(), KahanSum);
Run Code Online (Sandbox Code Playgroud)