我如何去创建任何我在代码后面定义大小的数组?

Posted

技术标签:

【中文标题】我如何去创建任何我在代码后面定义大小的数组?【英文标题】:how do i go about creating any array that i define the size for later in the code? 【发布时间】:2019-08-11 05:47:30 【问题描述】:

我需要创建两个数组,它们的大小反映了我加载到程序中的两个文件中数据的大小。这些数组需要被同一解决方案中的其他 .cpp/.h 文件访问,我将如何去做?

我已经有一些代码可以做到这一点,但它是特定于函数的,我不能在其他地方使用它。

ReadFunction.h

#include <string>
#include <fstream>
#include <iostream>

static std::string read_file(const char* filepath)

    FILE* file = fopen(filepath, "rt");
    fseek(file, 0, SEEK_END);
    unsigned long length = ftell(file);
    char* data = new  char[length + 3];
    memset(data, 0, length + 1);
    fseek(file, 0, SEEK_SET);
    fread(data, 1, length, file);
    fclose(file);

    std::string result(data);
    delete[] data;
    return result;


Main.cpp

#include<iostream>
#include "Headers/ReadWFunction.h"


int main(void)

    std::string file = read_file("Wally_grey.txt");
    std::cout << file << std::endl;

    system("PAUSE");
    return 0;

这段代码工作并加载到一个文件中,然后将其写入控制台,但是我需要为两个不同大小的文件执行两次,然后将它们加载到 double 类型的一维数组中,然后与另一个数组中的一个进行比较不同的 .cpp 文件。 但是我不知道该怎么做,因为我需要声明一个数组但不给它一个大小,直到 iv 加载到文件中,因此知道数组所需的大小。此外,这些数组需要由一个名为 compare.cpp 的单独 .cpp 文件访问,我是在 readFunctions.h 文件中声明这些数组并将它们公开还是在其他地方声明它们? 我对这些东西很陌生,所以任何帮助都将不胜感激。

【问题讨论】:

你已经在你的函数中创建了一个动态大小的数组,所以你知道怎么做。但既然这是 C++,为什么不直接使用 std::vector ... 或预先确定大小的字符串。 我没有看到问题,是什么阻止了您在函数中分配数组然后返回指向该数组的指针?这行得通,但当然,既然你是 C++ 程序员,最好的选择是std::vector&lt;double&gt; 好的,我已经完成了,但是我将如何在其他地方使用这个数组? @JackLimerick 只需从函数中返回数组/向量,就像您在上面示例中对字符串所做的那样。 【参考方案1】:

这是一个从文件中读取双精度并将它们作为向量返回的函数

static std::vector<double> read_file(const char* filepath)

    std::vector<double> v;
    std::ifstream file(filepath);
    double x;
    while (file >> x)
        v.push_back(x);
    return v;

【讨论】:

谢谢!我将如何做与此相反的操作以输出 .pgm 文件? 嗯,这是一个完全不同的话题,所以你应该问一个新问题。但是您可以使用 for range 循环 for (double x : v) do something with x 遍历向量

以上是关于我如何去创建任何我在代码后面定义大小的数组?的主要内容,如果未能解决你的问题,请参考以下文章

创建类时如何定义数组的大小?

如何在C#后面的代码中动态创建数据模板并绑定树视图层次结构数据

java中怎么创建一个数组

如何创建固定大小的对象数组

如何创建动态大小的结构数组?

如何在Mongoose模式中设置数组大小的限制