【问题标题】:Assigning element values in an array without knowing the size of the array [closed]在不知道数组大小的情况下分配数组中的元素值[关闭]
【发布时间】:2020-04-10 02:30:23
【问题描述】:

在我高中的 c++ 课程中,我们被分配了一个任务来编写一个程序,该程序允许用户输入将存储在数组中的值,而无需提示用户输入数组大小。因此,如果用户决定输入 1、2、3,则数组大小将从未知变为 3。

【问题讨论】:

  • 你的问题是什么?
  • 虽然他们很可能不会让你使用它,你需要类似的东西:stackoverflow.com/questions/1350630/…
  • 我的问题是是否有任何方法可以在不声明数组大小的情况下获取未知数量的输入
  • 你能解释一下这个作业允许你使用什么吗?你可以使用标准库容器吗?可以使用指针吗?您可以使用 new 和 delete 关键字吗?您使用什么操作系统?您使用的是什么 IDE 和编译器?

标签: c++ arrays


【解决方案1】:

数组大小将从未知变为三个。

无法更改数组的大小,也无法创建未知大小的数组。

但是,如果数组是动态分配的,那么您可以做的是分配另一个更大的数组并将较小数组的元素复制到较大的数组中。这种数据结构称为“可调整大小的数组”。标准库有一个实现这种数据结构的容器:std::vector。您可以使用它来实现您的程序。

【讨论】:

    【解决方案2】:

    如果允许,请使用 std::vector,否则这样的事情可能会有所帮助

    #include <cstdlib>
    #include <iostream>
    
    template <typename T>
    struct list final {
      T* values;
      std::size_t capacity, size;
    
      list() : values{nullptr}, capacity{0u}, size{0u} {}
      ~list() { std::free(values); }
      void push_back(T value) {
        if (size == capacity) {
          capacity = (capacity + 1) * 2;
          if (void* mem = std::realloc(values, capacity * sizeof(T))) {
            values = reinterpret_cast<T*>(mem);
          } else {
            throw std::bad_alloc();
          }
        }
        values[size++] = value;
      }
    
      void pop_back() { --size; }
    };
    
    int main() {
      list<int> integers;
      for (int i = 0; i < 10; ++i) {
        integers.push_back(i);
      }
      for (int i = 0; i < integers.size; ++i) {
        std::cout << integers.values[i] << std::endl;
      }
    }
    

    【讨论】:

    • 您应该描述程序正在做什么以使答案有用 - 但我认为“我们不允许使用指针”评论无论如何都会使这种方法有问题.
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多