如何为程序的每次运行创建一个存储不同数据类型的向量?

时间:2019-05-07 17:28:02

标签: c++

我有一个程序可以制作一个随机文件,其中包含它拥有的项目数,并且每个文件都有特定数据类型的随机项目,例如,名为“ integers”的文件为“ 5 3 7 10 232 2”,第一个数字是其后的项目数,然后是随机整数。名为“ strings”的文件是“ 3颌骨kks owoiwow”,以此类推,对于char和double也是如此。

我实现了用于排序算法的实现,并希望以相同的实现通过以下方式输入具有不同数据类型的文件:“ ./ a.out <字符串”或“ ./a.out <整数”。排序算法已经准备好处理不同的数据类型,但是无法读取不同的输入以存储在不同类型的向量中。我已经阅读了很多有关类型名称的信息,但仍然无法做到这一点。

TL; DR我想输入一个具有非描述性名称的文件,例如'hey.random_file',知道文件的结构首先是项目的数量,然后是数据类型仍然未知的项目,如何测试数据类型(用于字符串,int,double或char),然后以不需要我重复代码的方式继续制作测试数据类型的向量

这是主要函数的样子,heap_sort()函数经过测试可与字符串,char,double和int一起使用,但我无法读取不同数据类型的输入。

size_t n;

if(print_input)
    cout<<"Array size: ";

cin>>n;

vector<int> arr(n);

if(print_input)
    cout<<"Array elements: ";

for(size_t i = 0; i < n; i++)
    cin>>arr[i];

heap_sort(arr);

if(print_input)
    cout<<"Sorted array: ";

for(size_t  i = 0; i < n; i++)
    cout<<arr[i]<<' ';

1 个答案:

答案 0 :(得分:1)

使用功能模板编写一个可以完成所有工作的功能模板:

template<typename T>
vector<T> input(istream&);

template<typename T>
void output(const vector<T>&);

template<typename T>
void do_sort(istream& s)
{
    auto v = input(s);
    sort(v);
    output(v);
}

然后在运行时使用显式实例化:

int main()
{
    // ...
    ifstream is(filename);
    if (filename == ”integers”)
        do_sort<int>(is);
     else if (filename == “strings”)
        do_sort<string>(is);
    // ....
}