【问题标题】:Dynamically allocated动态分配
【发布时间】:2019-06-25 20:14:25
【问题描述】:

我需要帮助,改变大小和arr,在主函数中动态分配内存(动态分配)

这个程序对第一个程序使用循环整数,而类和结构是第二个程序

program_1

#include <iostream>
#include <iterator>
using namespace std;

void display_desc(const int arr[], int size)
{
    int copy_arr[size];
    copy(arr, arr + size, copy_arr);
    int temp;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            if (copy_arr[i] > copy_arr[j]) {
                temp = copy_arr[i];
                copy_arr[i] = copy_arr[j];
                copy_arr[j] = temp;
            }
        }
    }
    for (int i = 0; i < size; i++) {
        cout << copy_arr[i] << " ";
    }
    cout << endl;
}

int main()
{
    int size = 5;
    int arr[size];
    for (int i = 0; i < size; i++) {
        arr[i] = i;
    }
    display_desc(arr, size);
}

和 程序_2 更改 int main() 中的变量以使用动态内存分配

#include <iostream>
#include <iterator>
#include <windows.h>
using namespace std;
const int SLOT_ROOM = 5;
class Person {
public:
    Person()
    {
        name = "";
    }
    Person(string names)
    {
        name = names;
    }
    void set_name(string names) { name = names; }
    string get_name() { return name; }
private:
    string name;
};

struct Slot {
    bool blank;
    Person person;
};
class rental {
public:
    Slot used[SLOT_ROOM];
    rental()
    {
        for (int i = 0; i < SLOT_ROOM; i++) {
            Person person;
            used[i].person = person;
            used[i].blank = true;
        }
    }
    int in(const Person person)
    {
        for (int i = 0; i < SLOT_ROOM; i++) {
            if (used[i].blank) {
                used[i].blank = false;
                used[i].person = person;
                cout << "used in position " << i << endl;
                return i;
            }
        }
        cout << "the rental is full" << endl;
        return -1;
    }
    bool out(int i)
    {
        used[i].blank = true;
    }

    Slot* get_rental_list()
    {
        return used;
    }

    void print_person_list()
    {
        cout << endl
             << "List rental" << endl;
        for (int i = 0; i < SLOT_ROOM; i++) {
            cout << "Slot rental to " << i << endl;
            cout << "Name: " << used[i].person.get_name() << endl;
            cout << "Avail: " << used[i].blank << endl
                 << endl;
        }
    }

private:
    int SLOT_ROOM = 2;
    string time_rental;
};
int main()
{

    rental rental;

    Person person_1("make");
    Person person_2("angel");
    rental.in(person_1);
    rental.in(person_2);
    rental.print_person_list();
    rental.out(2);
    rental.print_person_list();
    rental.in(person_2);
    rental.print_person_list();
}

请帮忙,我不明白如何使用动态内存分配

我还在学c++

【问题讨论】:

  • 您的代码在技术上是无效的,因为 C++ 没有 variable-length arrays,它是 一些 编译器可能以不可移植的方式添加的扩展。请改用std::vector。使用std::vector 也是任何一种“动态数组”的标准解决方案。
  • 我可能错了,但最后我检查了,C++ 中的动态内存分配需要使用new
  • 另外,你知道std::copy,所以我想你也应该很容易找到和使用std::sort
  • @JoeyMallone 自 STL 时代以来,情况并非如此 :)
  • @LightnessRacesinOrbit,是的,我的声明中有这样的警告。我只是想说,OP 混淆了“动态内存分配”,它需要new(即使new 发生在STL 容器内),以及可变长度数组(VLA)。至少,这是我从 OP 的代码中感受到/理解的。

标签: c++ dynamic-memory-allocation


【解决方案1】:

改变

int arr[size];

int* arr = new int[size];

您需要对display_desc 中的int copy_arr[size]; 进行相同的更改。

完成后,您还需要delete[]内存。

delete[] arr;

在 main 的末尾,delete[] copy_arr;display_desc 的末尾。

在第二个问题中,您更难理解您想要什么。为什么要使用动态分配?您的代码看起来非常好。您也没有说要使用动态分配是哪个变量。

【讨论】:

  • 推荐使用std::vector不是更好吗?
  • 使用 std::vector 无疑会更好,但我觉得建议不会被遵循。似乎 OP 已被他的老师告知用动态分配替换他的 VLA。
  • 感谢解答程序1的帮助,对于程序2,我想在类person中动态分配“字符串名称”变量
  • @Meks 这听起来是个很糟糕的主意,你认为这样做会得到什么?
猜你喜欢
  • 2010-12-04
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多