【问题标题】:dynamically change the size of an array c++动态改变数组c ++的大小
【发布时间】:2012-04-17 19:21:09
【问题描述】:

我有一个数组定义为;

静态双 Temp_data[TABLE_SIZE];

我想根据用户输入改变数组的大小。 这可能吗? 请帮我。 谢谢。

【问题讨论】:

    标签: c++ arrays visual-c++


    【解决方案1】:

    没有。你可能想使用std::vector<double> Temp_data;

    然后你可以使用它的resize()成员函数来设置你认为合适的大小。

    编辑:为了清楚起见,您通常希望尽可能避免直接使用new(在这种情况下,您可以很容易地)。直接使用new 是很多类型错误的源头。 std::vector 处理了很多难以用new 纠正的极端情况,确保数据在超出范围时得到清理,等等。

    我之前说过,我将在这里重复一遍:有一次,您别无选择,只能编写使用 new 的代码。现在,你确实有一个选择——你应该锻炼它。鉴于现代编译器和标准库,几乎没有任何理由使用 new 分配数组。

    【讨论】:

    • 但是为什么你必须在向量中指定大小?
    • @Rohit:你没有。您可以从一个空的vector 开始,然后使用push_back 添加任意数量的项目(当然,有一个限制)。但是,如果用户提供了尺寸,您可以使用 resize 使其成为该尺寸。
    • 谢谢@JerryCoffin。但我想使用 CArray 或 Arrays。
    • @Rohit 1. 您可能想要访问第 i 个元素,为此,您需要先调整向量的大小。 2.出于效率考虑。如果您知道数组的大小,则可以调整它的大小,这比不断推回要好。 (在这种情况下,reserve() 可能是更好的选择。)
    • @gishu:您可以将std::vector 与需要数组的函数一起使用——当您需要调用该函数时,只需给它&myvector[0],或者(使用较新的编译器)@ 987654335@.
    【解决方案2】:

    T *pData

    pData = new T[NUM_ELEMENTS];

    基本上使用 new 运算符。从任何 C++ 参考中阅读有关 new 的更多信息

    【讨论】:

      【解决方案3】:

      使用动态内存分配。

      int size;
      cin>>size
      int *ptr = new int[size];
      

      http://www.cplusplus.com/doc/tutorial/dynamic/

      【讨论】:

      • 你对数组的控制比对向量的控制要多
      • 为什么说,你对数组的控制比对向量的控制要多?
      • 有时,向量是多余的。向量确实可以完成数组所做的所有事情,但可以让您添加超出其当前大小的新元素、调整其大小、搜索它、擦除元素等
      • @Rohit:到目前为止,听起来你认为vector 是真正给你更多控制权的那个。在任何情况下,至少部分正确——如果您真的需要不调整大小的东西(例如),请考虑使用std::array。搜索(例如)不是vector 的一部分——您将使用一种标准算法,该算法同样适用于数组。
      • 在调试中构建向量可能会很慢,但在发布构建中,向量和数组之间几乎没有区别。
      猜你喜欢
      • 2015-06-06
      • 1970-01-01
      • 2013-09-08
      • 2011-05-03
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多