Размер магазина не известен - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу создать программу для обратного массива.Но я получаю сообщение об ошибке, что размер хранилища массива a[] не известен.

#include<iostream>
using namespace std;

int main()
{
    int a[];
    int b, c;
    cin >> b;
    for (int i = 0; i < b; i++)
        cin >> a[i];
    for (c = b; c >= 0; c--)
        cout << a[c] << endl;

    return 0;
}

Ответы [ 4 ]

0 голосов
/ 06 февраля 2019

Вы не определяете размер для массива 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;
}
0 голосов
/ 06 февраля 2019

Вам необходимо назначить максимальный размер массива. Просто попробуйте это, назначив длину массива Ex Int a [5];

0 голосов
/ 06 февраля 2019

Расширение до JeJo * ответ :

Последний простой, элегантный и эффективный - для любого типа, такого же простого, как int.Однако если вы имеете дело с более сложными типами, то при таком подходе вы сначала инициализируете все элементы по умолчанию, а затем копируете или перемещаете, присваиваете конечные объекты, которых вы, скорее всего, хотели бы избежать.В таком случае лучше использовать следующий подход:

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

// appropriate loop definition here!
{
    v.emplace_back(/* the parameters you want to/must provide to constructor */);
}
0 голосов
/ 06 февраля 2019

Я хочу создать программу для обратного массива

Просто используйте 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;
}
...