是否可以根据另一个硬码数组的数据自动生成硬码数组?
is it possible to generate hardcode array according to data of another hardcode array automatically?
例如,我有一个对数组(这是一个静态变量)a[],它表示点a,B,C的坐标:
pair<float,float> MyClass::a[]={{0,0},{320,568},{640,0}};
,我想要另一个数组b[]来存储AB和BC的长度:
float MyClass::b[sizeof(a)/sizeof(pair<float,float>)-1]={
sqrt((a[1].first-a[0].first)*(a[1].first-a[0].first)+(a[1].second-a[0].second)*(a[1].second-a[0].second)),
sqrt((a[2].first-a[1].first)*(a[2].first-a[1].first)+(a[2].second-a[1].second)*(a[2].second-a[1].second))
};
但是b[]不是很好维护,因为如果我向a[]添加元素,我需要手动更改b[]。有没有什么方法可以自动生成b[] ?有没有类似于:macros
float b[]={MACRO(a)};
或
float b[]={MACRO(sizeof(a)/sizeof(pair<float,float>))};
或模板:
template<int i>
struct s{
float b[]={something a[i+1]-a[i]};
};
s<sizeof(a)/sizeof(pair<float,float>)> _s;
或其他设计模式,允许我改变a[]的大小,而无需手动更改b[],甚至不需要修改代码的其他部分?
一个明显的答案是使用vector而不是数组:
template <class T, size_t N>
size_t elements(T (&array)[N]) {
return N;
}
// could also use a vector for a, if desired:
pair<float,float> a[]={{0,0},{320,568},{640,0}};
vector<float> b;
for (int i=1; i<elements(a); i++) {
float dx = a[i].first - a[i-1].first;
float dy = a[i].second - a[i-1].second;
b.push_back(sqrt(dx*dx + dy * dy));
}
这样,a
的大小变化不需要任何其他变化,b
就可以正确地跟踪其大小。
当然,还有其他方法可以完成这项工作。例如,如果你经常这样做,你可以把它都包在一个class
中。我不确定这是否真的有什么意义。
这里最大的问题是C数组的使用;它们不容易初始化。使用std::array,非常容易:
pair<float,float> MyClass::a[]={{0,0},{320,568},{640,0}};
auto b = sqrt(a);
template<typename T, size_t N>
std::array<T, N> sqrt(std::pair<T,T> (&points)[N])
{
using std::sqrt;
std::array<T, N> retval;
for (int i = 0; i != N; ++i) {
retval[i] = sqrt(points[i].first * points[i].first +
points[i].second * points[i].second) ;
}
return retval;
}
相关文章:
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 很好的语法来获取对向量/数组数据的大小引用?
- 数组数据以错误的方式遍历 Python/Matlab
- 访问 Arduino 中的结构数组数据
- 在能够从 Web 浏览器访问大型数组数据的同时存储它的最可行方法是什么?
- 在C 类中声明数组数据
- 如何在 c++ 中将字符串数组数据写入输出文件
- 使用 stl::map 和 stl::unordered_map 对包含大量重复元素的数组数据进行排序
- 检索字符数组数据时出现问题
- 共享库的C 访问数组数据
- 将包含数组数据成员的结构保存到文件
- C++中的LinkedList字符数组数据
- 正在尝试使用if语句检查数组数据
- 在单独的数据中显示数组数据
- 如何在 c++ 中将字节类型的字符数组数据保存到文件中
- 从数组数据中缺少第一个元素的 DLL 返回C++结构
- 如何在C++中表示二进制字节数组数据
- 实现动态数组数据结构时出现"double free or corruption"错误
- 多维数组数据成员的运行时错误
- C++ :使用 * 显示数组数据的条形图