我有一些声明如下的数组:
static double covalent_radius[256] = {
[ 0 ] = 0.85,
[ 1 ] = 0.37,
...
};
C ++不允许这种声明。有没有办法实现这个目标?
答案 0 :(得分:11)
static double covalent_radius[256] = {
0.85, /* ?, Unknown */
0.37, /* H, Hydrogen */
...
};
这是C89,而不是C99所以我认为它应该有用。
答案 1 :(得分:6)
你为什么不这样做:
static double covalent_radius[256] = {
0.85, /* 0: ?, Unknown */
0.37, /* 1: H, Hydrogen */
...
};
答案 2 :(得分:3)
您可以使用std::vector
个std::tuple
个std::string
和double
#include <iostream>
#include <string>
#include <tuple>
#include <vector>
static auto periodic_table = std::vector<std::tuple<std::string, std::string, double>>
{
std::make_tuple("?", "Unknown", 0.85),
std::make_tuple("H", "Hydrogen", 0.37)
};
std::string element_symbol(int neutrons)
{
return std::get<0>(periodic_table[neutrons]);
}
std::string element_name(int neutrons)
{
return std::get<1>(periodic_table[neutrons]);
}
double covalent_radius(int neutrons)
{
return std::get<2>(periodic_table[neutrons]);
}
int main()
{
std::cout << element_symbol(1) << "\n";
std::cout << element_name(1) << "\n";
std::cout << covalent_radius(1) << "\n";
}
Live Example(使用C ++ 11初始化列表)。
注意:我会创建周期表std::vector
而不是数组,因为它们会不断合成新的(不稳定的)元素。