数组的存储大小未知

时间:2019-02-06 17:21:23

标签: c++ arrays

我想创建一个程序来反转数组,但是却收到错误消息,即数组a []的存储大小未知。

df <- structure(list(person1 = c(112, 164, 161, 191, 125, 125, 146, 
146, 200, 200), person2 = c(576, 987, 191, 161, 146, 200, 125, 
200, 125, 146)), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

4 个答案:

答案 0 :(得分:3)

  

我想创建程序来反转数组

为此只需使用std::vector

一个好的开始是:

#include <iostream>
#include <vector>

int main()
{
    std::size_t size;
    std::cin >> size;        // size of the array    
    std::vector<int> a(size);// allocate memory for provided size and 
                             // initialize with 0's
    // using range based loop iterate though referances of
    // each elements in the array and update with user input.
    for (int& element : a) std::cin >> element;

    return 0;
}

答案 1 :(得分:1)

扩展JeJoanswer

后者简单,优雅且高效-适用于与int类似的任何类型。但是,如果要处理更复杂的类型,则使用此方法,首先要默认初始化所有元素,然后复制或移动分配最终对象,这是您很可能希望避免的。在这种情况下,以下方法会更好:

std::vector<SomeComplexType> v;
v.reserve(NumberOfObjectsYouNeed);

// appropriate loop definition here!
{
    v.emplace_back(/* the parameters you want to/must provide to constructor */);
}

答案 2 :(得分:1)

您没有为a[]数组定义大小,因此没有错误消息。数组必须具有指定的大小。在您的情况下,您需要根据用户确定大小后使用new[]运算符来分配数组,例如:

#include <iostream>

int main() {
    int *a;
    int b;

    std::cin >> b;
    a = new int[b];

    for(int i = 0; i < b; ++i)
        std::cin >> a[i];

    for(int c = b - 1; c >= 0; --c)
        std::cout << a[c] << std::endl;

    delete[] a;
    return 0;
}

但是,在C ++中使用动态大小的数组的首选方法是使用标准std::vector容器,例如:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

int main() {
    std::vector<int> a;
    int b;

    std::cin >> b;
    a.reserve(b);

    std::copy_n(
        std::istream_iterator<int>(std::cin), n,
        std::back_inserter(a)
    );

    std::for_each(a.rbegin(), a.rend(),
        [](int i){ std::cout << i << std::endl; }
    );

    /* alternatively:
    std::reverse(a.begin(), a.end());
    for(int i : a)
        std::cout << i << std::endl;
    */

    return 0;
}

答案 3 :(得分:-2)

您必须分配最大数组大小 只需通过分配数组的长度来尝试 防爆 Int a [5];