[英]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;
}
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.