繁体   English   中英

在C ++中使用switch引用结构中的数据

[英]Referencing data in a struct using switch in C++

我的代码中有一个switch语句,可以决定几种情况。 根据选择,我想加载特定的数据集并将该数据集用于程序的其余部分。 挑战之一也是结构中的数组将是任意长度。 我要避免的是在每种情况下都要多次重写我的主程序。 我的数据包含在我的scenariodata.h文件中,而我的程序在test.cpp中。 现在它还没有编译,但是如果按照我想要的方式工作,它应该在控制台中显示“ 10”。 提前谢谢了。

测试文件

#include <iostream>
#include "scenarioData.h"

int main(){
    int choice = 1;

    //initialize a blank struct with generic name 'sd'
    sd_fmt sd;

    switch((int) choice){
        //Make a decision of which data set to use
        case 1:
            std::cout << "Using data1\n";
            sd = data1;
            break;
        case 2:
            std::cout << "Using data2\n";
            sd = data2;
            break;
    }

    //From here on do all my work with general variable name 'sd'
    std::cout << sd.speed[1];  //Should show 10 in the console

    return 0;
}

censageData.h

struct sd_fmt {
    double *speed;
};

struct sd_fmt {
    double speed[4] = {1,10,100,1000};
} data1;

struct sd_fmt{
    double speed[5] = {2,200,2000, 20,20000};
} data2;

我已经将该片段更新为更现代的C ++样式。

结构定义与结构实例的声明混淆。 代替创建包含指针的结构,使用std :: vector。 应尽可能避免使用指针。

向量具有多个优点,包括大小可变。 向量的初始化也很简单。 如果向量的大小已知,则at()成员可用于访问特定元素。

switch语句会复制不理想的向量。 如果向量很大,则使用对向量的引用会更有效。 对于这个小例子,这不是问题。

#include <vector>
#include <iostream>

using sd_fmt = std::vector<double>;

sd_fmt data1 = {1,10,100,1000};
sd_fmt data2 = {2,200,2000, 20,20000};

int main(){
    int choice = 1;

    //initialize a blank struct with generic name 'sd'
    sd_fmt sd;

    switch((int) choice){
        //Make a decision of which data set to use
        case 1:
        std::cout << "Using data1\n";
        sd = data1;
        break;
        case 2:
        std::cout << "Using data2\n";
        sd = data2;
        break;
    }

    //From here on do all my work with general variable name 'sd'
    std::cout << sd.at(1);  //Should show 10 in the console

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM