如何将此C代码转换为C ++?

时间:2014-08-24 22:28:26

标签: c++ c arrays c++11

我有一些声明如下的数组:

static double covalent_radius[256] = {
    [ 0 ] = 0.85,
    [ 1 ] = 0.37,
    ...
};

C ++不允许这种声明。有没有办法实现这个目标?

3 个答案:

答案 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::vectorstd::tuplestd::stringdouble

#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而不是数组,因为它们会不断合成新的(不稳定的)元素。