Элементы std::vector<std::vector<T>>
не являются смежными в памяти, тогда как элементы S[rows][cols]
являются смежными. Для преобразования между ними вы должны копировать (и преобразовывать, если типы T
и S
различны) элементы строка за строкой. Общее решение:
template<typename T, typename S, class Op, std::size_t rows, std::size_t cols>
void transform_vec_vec_to_mat(const std::vector<std::vector<T>>& from, Op op, S (&to)[rows][cols]) {
assert(from.size() == rows);
for (std::size_t row = 0; row < rows; ++row) {
assert(from[row].size() == cols);
std::transform(from[row].begin(), from[row].end(), to[row], op);
}
}
std::vector<std::vector<double>> data;
std::complex<double> in[rows][cols];
const auto double_to_complex = [](double d) { return std::complex<double>{d, 0}; };
transform_vec_vec_to_mat(data, double_to_complex, in);
Имейте в виду, что реальный ввод может рассматриваться как особый случай для экономии вычислительного времени и пространства. См. официальную документацию для получения более подробной информации.