使用方便std::generate
获取 T 的序列。此处的简单示例代码:
std::vector<int> v(5);
std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });
我可以使用 std::generate
吗?得到std::vector<std::array<T,2>>
?
我的模板函数代码在这里:
#include <algorithm>
#include <array>
#include <vector>
template<typename T>
std::vector<std::array<T, 2>> m(int rows, int cols) {
std::vector<std::array<T, 2>> vec(rows*cols);
// this is the x value I want to generate
std::vector<T> x(rows*cols);
std::generate(x.begin(), x.end(),
[n = -1, COLS = cols]() mutable { ++n; return n % COLS;});
// This is the y value I want to generate
std::vector<T> y(rows*cols);
std::generate(y.begin(), y.end(),
[n = -1, ROWS = rows]() mutable { ++n; return floor(n / ROWS); });
// Is it possible to combine the above steps into one step?
std::generate(vec.begin(), vec.end(),
[n = -1, COLS = cols, ROWS = rows]() mutable { ++n; return .... });
return vec;
}
我想将两个步骤合并为一个步骤,这样做有什么方便的方法吗?
最佳答案
你的 lambda 应该是
[n = -1, COLS = cols, ROWS = rows]() mutable {
++n;
return std::array<T, 2>{n % COLS, n / ROWS};
}
关于c++ - 我可以使用 std::generate 来获取 std::array<T, 2> 的 vector 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48523432/