【发布时间】:2016-07-28 01:47:05
【问题描述】:
我想处理大量的双精度数组。所有数组的长度相同。我决定使用 std::arrays 的 std::vector。对于数据缩放,我需要找到所有值的最小值和最大值。我如何认为我可以做到这一点如下:
#include <algorithm>
#include <vector>
#include <array>
class ChannelData {
...
template<std::size_t N>
bool static compareX(std::array<double, m_nelem> const& a, std::array<double, m_nelem> const& b) {
return a[N] < b[N];
}
std::vector<std::array<double, m_nelem> > m_data;
std::array<<std::array<double, 2> m_nelem> m_minmax;
void find_minmax_x(){
for (int i = 0; i < m_nelem; i++){
auto minmax = std::minmax_element(m_data.begin(), m_data.end(), compareX<i>);
m_minmax[i][0] = (*minmax.first)[i];
m_minmax[i][1] = (*minmax.second)[i];
}
}
这不会编译。那是因为我用来在函数find_minmax_x 中实例化compareX<N> 的非类型参数i 不是常量表达式。
据我了解,编译器不知道在编译时要实例化哪些版本,尽管在这种情况下很明显。我最终做的是手动展开 for 循环,但这很难看。你能推荐一种更美观的方式来实现这一点吗?
【问题讨论】:
标签: arrays templates c++11 vector std